实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的导出文件(通常叫做export feed),来供其他系统使用。

Scrapy 自带了 Feed 输出,并且支持多种序列化格式(serialization format)及存储方式(storage backends)

1.序列化方式

Serialization formats

feed输出使用到了 Item exporters。其自带支持的类型有:

您也可以通过 FEED_EXPORTERS 设置扩展支持的属性。

JSON

JSON:

JSON lines

JSON lines:

CSV

CSV:

XML

XML:

Pickle

Pickle:

Marshal

Marshal:

2.存储

使用 feed 输出时您可以通过使用 URI(通过 FEED_URI 设置) 来定义存储端。feed 输出支持 URI 方式支持的多种存储后端类型。

自带支持的存储后端有:

有些存储后端会因所需的外部库未安装而不可用。例如,S3只有在boto库安装的情况下才可使用。

3.存储URI参数

存储 URI 也包含参数。当feed被创建时这些参数可以被覆盖

其他命名的参数会被 spider同名的属性所覆盖。例如, 当 feed 被创建时, %(site_id)s 将会被 spider.site_id 属性所覆盖。

下面用一些例子来说明:

1.存储在FTP,每个 spider一个目录:

ftp://user:[email protected]/scraping/feeds/%(name)s/%(time)s.json

2.存储在S3,每一个spider一个目录:

s3://mybucket/scraping/feeds/%(name)s/%(time)s.json

4.本地文件系统

将 feed 存储在本地系统:

注意: (只有)存储在本地文件系统时,您可以指定一个绝对路径 tmp/export.csv 并忽略协议(scheme)。不过这仅仅只能在 Unix 系统中工作。

FTP

将feed存储在FTP服务器

S3

将feed存储在 Amazon S3

您可以通过在 URI 中传递 user/pass 来完成 AWS 认证,或者也可以通过下列的设置来完成:

AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY

标准输出

feed 输出到 Scrapy进程的标准输出

5.Settings

这些是配置 feed 输出的设定:

设置默认值描述
FEED_URINone输出 feed 的 URI
FEED_FORMAT 输出 feed 的序列化格式
FEED_EXPORT_ENCODINGNone使用feed编码
FEED_EXPORT_FIELDSNone使用FEED_EXPORT_FIELDS选项定义要导出的字段及其顺序
FEED_EXPORT_INDENT0 
FEED_STORE_EMPTYFalse是否导出空的feeds(即没有item)
FEED_STORAGES{}包含您的项目支持的其他提要存储后端的字典。密钥是URI方案,值是存储类的路径。
FEED_STORAGE_FTP_ACTIVEFalse 
FEED_STORAGE_S3_ACL’’ 
FEED_STORAGES_BASE{
’’: ‘scrapy.extensions.feedexport.FileFeedStorage’,
‘file’: ‘scrapy.extensions.feedexport.FileFeedStorage’,
‘stdout’: ‘scrapy.extensions.feedexport.StdoutFeedStorage’,
‘s3’: ‘scrapy.extensions.feedexport.S3FeedStorage’,
‘ftp’: ‘scrapy.extensions.feedexport.FTPFeedStorage’,
}
 
FEED_EXPORTERS{} 
FEED_EXPORTERS_BASE{
‘json’: ‘scrapy.exporters.JsonItemExporter’,
‘jsonlines’: ‘scrapy.exporters.JsonLinesItemExporter’,
‘jl’: ‘scrapy.exporters.JsonLinesItemExporter’,
‘csv’: ‘scrapy.exporters.CsvItemExporter’,
‘xml’: ‘scrapy.exporters.XmlItemExporter’,
‘marshal’: ‘scrapy.exporters.MarshalItemExporter’,
‘pickle’: ‘scrapy.exporters.PickleItemExporter’,
}
 

Scrapy 1.7

Scrapy 安装并创建运行爬虫项目(1) Scrapy 命令行工具(2) Scrapy 选择器(3) Scrapy Item(4) Scrapy Item Loaders(5) Scrapy Item Pipeline(6) Scrapy Feed exports(7) Scrapy 架构概览(8) Scrapy 手写一个爬虫(9) Scrapy 知乎模拟登陆 (10) Scrapy源码分析 架构概览(1) Scrapy源码分析 运行入口(2) Scrapy源码分析 核心组件初始化(3) Scrapy源码分析 核心抓取流程(4) Scrapy 常用技巧总结