【Scrapy 框架】「版本2.4.0源码」输出文件(Feed exports) 详解篇

全部源码解析文章索引目录传送门

【Scrapy 框架解析】版本 2.4.0 源码篇:全部配置目录索引

内容介绍

实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的“输出文件”(通常叫“输出 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:password@ftp.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:aws_secret@mybucket/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生成多个输出文件,存储到每个输出文件中指定的项目数。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/113499876
今日推荐