Feed exports

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

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

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

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

    - FEED_FORMAT: json- 使用的exporter: JsonItemExporter- 大数据量情况下使用JSON请参见

    JSON lines

    - : jsonlines- 使用的exporter: JsonLinesItemExporter

    CSV

    - : csv- 使用的exporter: CsvItemExporter- To specify columns to export and their order useFEED_EXPORT_FIELDS. Other feed exporters can also use thisoption, but it is important for CSV because unlike many other exportformats CSV uses a fixed header.

    XML

    - FEED_FORMAT: xml- 使用的exporter: XmlItemExporter

    Pickle

    Marshal

    - : marshal- 使用的exporter: MarshalItemExporter

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

    自带支持的存储后端有:

    - 本地文件系统- - S3 (需要 )- 标准输出

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

    存储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

    将feed存储在本地系统。

    FTP

    将feed存储在FTP服务器。

    - URI scheme: ftp- URI样例: ftp://user:pass@ftp.example.com/path/to/export.csv- 需要的外部依赖库: none

    S3

    将feed存储在 Amazon S3

    - URI scheme: s3- URI样例: - s3://mybucket/path/to/export.csv - - 需要的外部依赖库:

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

    - AWS_ACCESS_KEY_ID-

    标准输出

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

    - URI scheme: stdout- URI样例: stdout:- 需要的外部依赖库: none

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

    FEED_URI

    Default: None

    输出feed的URI。支持的URI协议请参见存储端(Storage backends)

    为了启用feed输出,该设定是必须的。

    FEED_FORMAT

    输出feed的序列化格式。可用的值请参见序列化方式(Serialization formats)

    Default: None

    A list of fields to export, optional.Example: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"].

    When FEED_EXPORT_FIELDS is empty or None (default), Scrapy uses fieldsdefined in dicts or subclasses a spider is yielding.

    If an exporter requires a fixed set of fields (this is the case forCSV export format) and FEED_EXPORT_FIELDSis empty or None, then Scrapy tries to infer field names from theexported data - currently it uses field names from the first item.

    FEED_STORE_EMPTY

    Default: False

    是否输出空feed(没有item的feed)。

    FEED_STORAGES

    Default:: {}

    包含项目支持的额外feed存储端的字典。字典的键(key)是URI协议(scheme),值是存储类(storage class)的路径。

    FEED_STORAGES_BASE

    Default:

    包含Scrapy内置支持的feed存储端的字典。

    FEED_EXPORTERS

    Default::

    包含项目支持的额外输出器(exporter)的字典。该字典的键(key)是URI协议(scheme),值是 类的路径。

    FEED_EXPORTERS_BASE

    Default:

    1. FEED_EXPORTERS_BASE = {
    2. 'json': 'scrapy.exporters.JsonItemExporter',
    3. 'jsonlines': 'scrapy.exporters.JsonLinesItemExporter',
    4. 'csv': 'scrapy.exporters.CsvItemExporter',
    5. 'xml': 'scrapy.exporters.XmlItemExporter',
    6. 'marshal': 'scrapy.exporters.MarshalItemExporter',