「Scrapy 爬虫框架」输出文件(Feed exports) 详解

文章目录

  • 内容介绍
  • 序列化方式(serialization formats)
  • 数据存储(Storage )

内容介绍

开发环境为 Python3.6,Scrapy 版本 2.4.x ,爬虫项目全部内容索引目录

看懂Python爬虫框架,所见即所得一切皆有可能

本章带你学习基于 Python3Scrapy 爬虫框架 中数据爬取过程中数据输出操作。生成一个带有爬取数据的“输出文件”(通常叫“输出 feed”),来供其它系统使用。

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

如果抓取的内容都存储到数据仓库中本章节可以无视。

代码内容基于「Scrapy 爬虫框架」源码版本 2.4.0 ,更新内容会进行标记说明对应版本。

序列化方式(serialization formats)

数据类型 输出格式化 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)、标注输出。

  • 1.存储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
  • 2.存储端(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:
  • 3.设定(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
  • 4.输出(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生成多个输出文件,存储到每个输出文件中指定的项目数。

你可能感兴趣的:(Python,爬虫基础和项目管理,python,scrapy,Feed,exports,源码,爬虫)