当爬取完数据后,可以产生一个“export file”(输出文件)–>export feed(反馈报告),可以被其他系统所使用消耗
scrapy提供 Feed Exports,可以为items产生一个feed(文件如json,CSV,xml等),然后格式化的存储到后端
Serialization formats
当你爬取数据后,想把数据保存在本地路径(如json格式)或者其他地方,scrapy 使用(Item exporters),支持以下格式:
- JSON ———–JsonItemExporter
- JSON lines — JsonLinesItemExporter
- CSV ————CsvItemExporter
- XML ———–XmlItemExporter
- Pickle ———PickleItemExporter
- Marshal ——MarshalItemExporter
你也可以扩展其他格式,通过 FEED_EXPORTERS setting 来设置
Storages
当为item数据定义好输出格式后,使用URI定义(FEED_URI setting)多种选择保存到后端:
- 本地文件
- FTP
- S3 需要其他组件
- 标准的输出
Storage URI parameters
添加参数
- %(time)s — 时间戳
- %(name)s — spider 的名字
-
%(site_id)s — 当feed被创建后spider.site_id属性变量会替换参数值。
ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
Storage backends 存储到后端
-
Local filesystem (存储到本地路径)
- URI scheme : file
- eg : file:///tmp/export.csv
- 不需要其他组件
-
FTP
- URI scheme : ftp
- eg : ftp://user:pass@ftp.example.com/path/to/export.csv
- 不需要其他组件
-
S3
- URI scheme :s3
- eg :
s3://mybucket/path/to/export.csv
- eg :
s3://aws_key:aws_secret@mybucket/path/to/export.csv
- 需要其他组件 botocore 、boto
- URI scheme :s3
Standard output
Settings
feed exports 的一些配置:
FEED_URI
FEED_FORMAT
FEED_EXPORT_ENCODING
FEED_EXPORT_FIELDS :
FEED_EXPORT_FIELDS = ["foo", "bar", "baz"] #
FEED_STORE_EMPTY
FEED_STORAGES : default {}
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 : default {}
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',
}
FEED_EXPORTERS = {
'csv': None, #禁止使用CSV格式
}
FEED_STORE_EMPTY
FEED_EXPORT_ENCODING