爬虫:Scrapy9 - Feed exports
实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的“输出文件”(通常叫“输出 feed”),来供其它系统使用。
Scrapy 自带了 Feed 输出,并且支持多种序列化格式(serialization format)及存储方式(storage backends)。
序列化方式(serialization formats)
feed 输出使用到了 Item exporters。其自带支持的类型有:
- JSON
- JSON Lines
- CSV
- XML
也可以通过 FEED_EXPORTERS 设置扩展支持的属性。
JSON
- FEED_FORMAT: json
- 使用的 exporter: JsonItemExporter
- 大数据量情况下使用 JSON 请参见 这个警告
JSON lines
- FEED_FORMAT: jsonlines
- 使用的 exporter: JsonLinesItemExporter
CSV
- FEED_FORMAT: csv
- 使用的 exporter: CsvItemExporter
XML
- FEED_FORMAT: xml
- 使用的 exporter: XmlItemExporter
Pickle
- FEED_FORMAT: pickle
- 使用的 exporter: PickleItemExporter
Marshal
- FEED_FORMAT: marshal
- 使用的 exporter: MarshalItemExporter
存储(Storages)
使用 feed 输出时可以通过使用 URL(通过 FEED_URI 设置)来定义存储端。feed 输出支持 URI 方式支持的多种存储后端类型。
自带支持的存储后端有:
- 本地文件系统
- FTP
- S3(需要 boto)
- 标注输出
有些存储后端会因为所需外部库未安装而不可用。例如,S3 只有在 boto 库安装的情况下才可用。
存储 URI 参数
存储 URI 也包含参数。当 feed 被创建时这些参数可以被覆盖:
- %(time)s - 当 feed 被创建时被 timestamp 覆盖
- %(name)s - 被 spider 的名字覆盖
其它命名的参数会被 spider 同名的属性所覆盖。例如,当 feed 被创建时,%(site_id)s 将会被 spider.site_id 属性所覆盖。
示例:
- 存储在 FTP,每个 spider 一个目录:
- ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
- 存储在 S3,每个 spider 一个目录:
- s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
存储端(Storage backends)
本地文件系统
将 feed 存储在本地系统。
- URI scheme:file
- URI 样例:file://tmp/export.csv
- 需要的外部依赖库:none
注意: (只有)存储在本地文件系统时,您可以指定一个绝对路径 /tmp/export.csv 并忽略协议(scheme)。不过这仅仅只能在 Unix 系统中工作。
FTP
将 feed 存储在 FTP 服务器。
- URI scheme:
ftp - URI 样例:
ftp://user:pass@ftp.example.com/path/to/export.csv - 需要的外部依赖库:
none
S3
将 feed 存储在 Amazon S3 。
- URI scheme: s3
- URI 样例:
- s3://mybucket/path/to/export.csv
- s3://aws_key:aws_secret@mybucket/path/to/export.csv
- 需要的外部依赖库: boto
您可以通过在 URI 中传递 user/pass 来完成 AWS 认证,或者也可以通过下列的设置来完成:
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
标准输出
feed 输出到 Scrapy 进程的标准输出。
- URI scheme: stdout
- URI 样例: stdout:
- 需要的外部依赖库: none
设定(settings)
这些是配置 feed 输出的设定:
- FEED_URI (必须)
- FEED_FORMAT
- FEED_STORAGES
- FEED_EXPORTERS
- FEED_STORE_EMPTY
FEED_URI
Default:None
输出 feed 的 URI。支持的 URI 协议请参见存储端(Storage backends)。
为了启用 feed 输出,该设定是必须的。
FEED_FORMAT
输出 feed 的序列化格式。可用的值请参见序列化方式(Serialization formats)。
FEED_STORE_EMPTY
Default:False
是否输出空 feed(没有 item 的 feed)。
FEED_STORAGES
Default::{}
包含项目支持的额外 feed 存储端的字典。 字典的键(key)是 URI 协议(scheme),值是存储类(storage class)的路径。
FEED_STORAGES_BASE
Default:
{
'': 'scrapy.contrib.feedexport.FileFeedStorage',
'file': 'scrapy.contrib.feedexport.FileFeedStorage',
'stdout': 'scrapy.contrib.feedexport.StdoutFeedStorage',
's3': 'scrapy.contrib.feedexport.S3FeedStorage',
'ftp': 'scrapy.contrib.feedexport.FTPFeedStorage',
}
包含 Scrapy 内置支持的 feed 存储端的字典。
FEED_EXPORTERS
Default::{}
包含项目支持的额外输出器(exporter)的字典。 该字典的键(key)是 URI 协议(scheme),值是 Item 输出器(exporter) 类的路径。
FEED_EXPORTERS_BASE
Default:
FEED_EXPORTERS_BASE = {
'json': 'scrapy.contrib.exporter.JsonItemExporter',
'jsonlines': 'scrapy.contrib.exporter.JsonLinesItemExporter',
'csv': 'scrapy.contrib.exporter.CsvItemExporter',
'xml': 'scrapy.contrib.exporter.XmlItemExporter',
'marshal': 'scrapy.contrib.exporter.MarshalItemExporter',
}
包含 Scrpay 内置支持的 feed 输出器(exporter)的字典。
爬虫:Scrapy9 - Feed exports的更多相关文章
- Scrapy笔记:持久化,Feed exports的使用
首先要明确的是,其实所有的FeedExporter都是类,里面封装了一般进行io操作的方法.因此,要怎么输出呢?其实从技术实现来说,在生成item的每一步调用其进行储存都是可以的,只不过为了更加符合s ...
- scrapy爬虫框架入门教程
scrapy安装请参考:安装指南. 我们将使用开放目录项目(dmoz)作为抓取的例子. 这篇入门教程将引导你完成如下任务: 创建一个新的Scrapy项目 定义提取的Item 写一个Spider用来爬行 ...
- python爬虫框架scrapy初识(一)
Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的 ...
- Scrapy 爬虫框架入门案例详解
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...
- Python爬虫知识点四--scrapy框架
一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...
- 97、爬虫框架scrapy
本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息 一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...
- [原创]手把手教你写网络爬虫(4):Scrapy入门
手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...
- python3 分布式爬虫
背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.py ...
- [爬虫]scrapy框架
Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据 ...
随机推荐
- which,whereis,locate,find
which 查看可执行文件的位置 [root@redhat ~]# which passwd /usr/bin/passwd which是通过 PATH 环境变量到该路径内查找可执行文件,所 ...
- centos7安装python3和ipython
CentOS7下默认系统自带python2.X的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装 ...
- 项目部署到自己的IIS上
一般我们只能在本机上才可以开到我们的项目,这个是不需要连网的 如果想让我们的项目在网站中打开,别人也可以看到,就需要把我们的项目部署到服务器上了,输入IP就可以看到我们的项目 发布项目 然后发布网站 ...
- Centos防火墙添加IP白名单
Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...
- 短信状态监听 - iOS
当使用 App 时若短信介入需要对当前状态进行监听操作,根据不同的状态实行相关的需求操作,废话不多说步骤如下. 首先,常规操作先引用对应的头文件,来为后续功能铺路. #import <Messa ...
- motto - question - bodyParser.urlencoded 中设置 extended 为 true 和 false 有什么区别吗?
本文搜索关键字:motto node nodejs js javascript body-parser bodyparser urlencoded x-www-form-urlencoded exte ...
- Linux进程通信之匿名管道
进程间的通信方式 进程间的通信方式包括,管道.共享内存.信号.信号量.消息队列.套接字. 进程间通信的目的 进程间通信的主要目的是:数据传输.数据共享.事件通知.资源共享.进程控制等. 进程间通信之管 ...
- AngularJS常见面试题
本文引自:https://segmentfault.com/a/1190000005836443 问题来源:如何衡量一个人的 AngularJS 水平? ng-if 跟 ng-show/hide 的区 ...
- JavaScript---ECMA对象
1.对象的概念及分类 1.1 ECMAScript中没有类,但定义了“对象”,逻辑上等价于其他程序设计语言中的类. var o = new Object(); 1.2 本地对象(native obje ...
- Deepin15.7 更改软件的jdk
最近更新了系统,发现smartsvn.smartgit.Dbeaver都无法打开了,上网googlel一下,发现是java9的问题,需要把软件的java版本更改一下就可以了 先上jdk的位置 一.sm ...