【Scrapy 框架翻译】输出文件(Feed exports) 篇
程序员文章站
2022-05-08 16:47:03
...
版本号:Scrapy 2.4
文章目录
内容介绍
实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的“输出文件”(通常叫“输出 feed”),来供其它系统使用。
如果抓取的内容都存储到数据仓库中本章节可以无视。
Scrapy 自带了 Feed 输出,并且支持多种序列化格式(serialization format)及存储方式(storage backends)。
序列化方式(serialization formats)
feed 输出使用到了 Item exporters。其自带支持的类型有:JSON、JSON Lines、CSV、XML等。
数据类型 | 输出格式化 | Item类型输出 |
---|---|---|
JSON | json | JsonItemExporter |
JSON lines | jsonlines | JsonLinesItemExporter |
CSV | csv | CsvItemExporter |
XML | xml | XmlItemExporter |
Pickle | pickle | PickleItemExporter |
Marshal | marshal | MarshalItemExporter |
数据存储(Storage )
使用 feed 输出时可以通过使用 URL(通过 FEED_URI 设置)来定义存储端。feed 输出支持 URI 方式支持的多种存储后端类型。
自带支持的存储后端有:本地文件系统、FTP、S3(需要 boto)、标注输出。
存储URI参数(Storage URI parameters)
存储 URI 也包含参数。当 feed 被创建时这些参数可以被覆盖:
- %(time)s - 当 feed 被创建时被 timestamp 覆盖
- %(name)s - 被 spider 的名字覆盖
其它命名的参数会被 spider 同名的属性所覆盖。例如,当 feed 被创建时,%(site_id)s 将会被 spider.site_id 属性所覆盖。
# 存储在 FTP,每个 spider 一个目录
ftp://user:[email protected].example.com/scraping/feeds/%(name)s/%(time)s.json
# 存储在 S3,每个 spider 一个目录
s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
存储端(Storage backends)
存储类型 | 系统限制 | URI scheme | 依赖库 | 样例 |
---|---|---|---|---|
本地文件系统 | Unix | file | - | file://tmp/export.csv |
FTP | - | ftp | - | tp://user:[email protected]/path/to/export.csv |
S3 | - | s3 | boto | s3://aws_key:[email protected]/path/to/export.csv |
谷歌云存储(GCS) | - | gs | - | gs://mybucket/path/to/export.csv |
标准输出 | - | stdout | - | stdout: |
设定(settings)
- FEEDS(强制性)
- FEED_EXPORT_ENCODING
- FEED_STORE_EMPTY
- FEED_EXPORT_FIELDS
- FEED_EXPORT_INDENT
- FEED_STORAGES
- FEED_STORAGE_FTP_ACTIVE
- FEED_STORAGE_S3_ACL
- FEED_EXPORTERS
- FEED_EXPORT_BATCH_ITEM_COUNT
输出(FEEDS)
默认输出字典格式。启用提要导出功能需要此设置。
{
'items.json': {
'format': 'json',
'encoding': 'utf8',
'store_empty': False,
'fields': None,
'indent': 4,
'item_export_kwargs': {
'export_empty_fields': True,
},
},
'/home/user/documents/items.xml': {
'format': 'xml',
'fields': ['name', 'price'],
'encoding': 'latin1',
'indent': 8,
},
pathlib.Path('items.csv'): {
'format': 'csv',
'fields': ['price', 'name'],
},
}
主要参数列表:
版本 | 参数名称 | 参数说明 |
---|---|---|
- | format | 强制序列化值格式 |
- | batch_item_count | FEED_EXPORT_BATCH_ITEM_COUNT |
2.3.0 | encoding | FEED_EXPORT_ENCODING,设置json的编码格式 |
2.3.0 | fields | FEED_EXPORT_FIELDS,设置输出的字段 |
2.3.0 | indent | FEED_EXPORT_INDENT,设置缩进方式 |
2.3.0 | item_export_kwargs | dict的输出类别, |
2.4.0 | overwrite | 是否覆盖它(True)或附加到其内容(False) |
2.4.0 | store_empty | FEED_STORE_EMPTY,是否导出空 |
2.4.0 | uri_params | FEED_URI_PARAMS,用于设置要应用的参数。 |
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_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_EXPORT_BATCH_ITEM_COUNT
Scrapy生成多个输出文件,存储到每个输出文件中指定的项目数。