scrapy 2.3 Feed导出设置

2021-06-09 11:26 更新

设置

以下是用于配置源导出的设置:

FEEDS (强制性)FEED_EXPORT_ENCODINGFEED_STORE_EMPTYFEED_EXPORT_FIELDSFEED_EXPORT_INDENTFEED_STORAGESFEED_STORAGE_FTP_ACTIVEFEED_STORAGE_S3_ACLFEED_EXPORTERSFEED_EXPORT_BATCH_ITEM_COUNT

FEEDS

2.1 新版功能.

违约: ​{{}}

一个字典,其中每个键都是一个feed URI(或 ​pathlib.Path​ 对象),每个值都是一个嵌套字典,其中包含特定提要的配置参数。

启用提要导出功能需要此设置。

见 存储后端 用于支持的URI方案。

例如::

{
    '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​ : serialization format .此设置是必需的,没有回退值。
  • batch_item_count​ :回到 ​FEED_EXPORT_BATCH_ITEM_COUNT​ .
  • encoding​ :回到 ​FEED_EXPORT_ENCODING​ .
  • fields​ :回到 ​FEED_EXPORT_FIELDS​ .
  • indent​ :回到 ​FEED_EXPORT_INDENT​ .
  • item_export_kwargs​: ​dict​ 对应的关键字参数 item exporter class .
  • overwrite​ :如果文件已存在,是否覆盖该文件 (​True​ )或附加到其内容中 (​False​ )默认值取决于 storage backend :
  • 本地文件系统: ​False
  • FTP: ​True

注解

    某些FTP服务器可能不支持附加到文件( ​APPE​ FTP命令)。
  • S3 : ​True​ (附加 is not supported ) 
  • 标准输出 : ​False​ (不支持覆盖)
  • store_empty​ :回到 ​FEED_STORE_EMPTY​ .
  • uri_params​ :回到 ​FEED_URI_PARAMS​ .

FEED_EXPORT_ENCODING

违约: ​None

要用于源的编码。

如果未设置或设置为 ​None​ (默认)它对除JSON输出外的所有内容都使用UTF-8,JSON输出使用安全的数字编码。 (​\uXXXX​ 序列)出于历史原因。

使用 ​utf-8​ 如果您也想要为JSON使用UTF-8。

FEED_EXPORT_FIELDS

违约: ​None

要导出的字段列表,可选。例子: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"] .

使用feed_export_fields选项定义要导出的字段及其顺序。

当FEED_EXPORT_FIELDS为空或​None​(默认值)时,Scrapy使用中定义的字段 item objects 你的蜘蛛屈服了。

如果导出器需要一组固定的字段(这是 CSV export format)和feed_export_字段为空或无,然后scrapy尝试从导出的数据中推断字段名-当前它使用第一个项目中的字段名。

FEED_EXPORT_INDENT

违约: ​0

用于在每个级别上缩进输出的空间量。如果 ​FEED_EXPORT_INDENT​ 是非负整数,则数组元素和对象成员将以该缩进级别进行漂亮打印。缩进量 ​0​ (默认值)或负数,将把每个项目放到一个新行上。 ​None​ 选择最紧凑的表示形式。

当前仅由执行 ​JsonItemExporter​ 和 ​XmlItemExporter​ ,即当您要导出到 ​.json​ 或 ​.xml​ .

FEED_STORE_EMPTY

违约: ​False

是否导出空源(即没有项的源)。

FEED_STORAGES

违约: ​{{}}

包含项目支持的其他提要存储后端的dict。键是URI方案,值是指向存储类的路径。

FEED_STORAGE_FTP_ACTIVE

违约: ​False

将源导出到FTP服务器时是否使用活动连接模式 (​True​ )或者使用被动连接模式 (​False​ ,默认)。

有关ftp连接模式的信息,请参阅 What is the difference between active and passive FTP? .

FEED_STORAGE_S3_ACL

违约: ​''​ (空字符串)

包含项目导出到AmazonS3的源的自定义ACL的字符串。

有关可用值的完整列表,请访问 Canned ACL 亚马逊S3文档部分。

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',
}

包含由Scrapy支持的内置提要存储后端的dict。您可以通过分配 ​None​ 到他们的URI方案 ​FEED_STORAGES​ . 例如,要禁用内置FTP存储后端(不替换),请将其放入 ​settings.py​ ::

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS

违约: ​{{}}

包含项目支持的其他导出器的dict。键是序列化格式,值是指向 Item exporter 类。

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',
}

包含由Scrapy支持的内置饲料导出器的dict。您可以通过分配 ​None​ 到其序列化格式 ​FEED_EXPORTERS​ . 例如,要禁用内置的csv导出器(不替换),请将其放入 ​settings.py​ ::

FEED_EXPORTERS = {
    'csv': None,
}

FEED_EXPORT_BATCH_ITEM_COUNT

违约: ​0

如果分配了一个大于 ​0​ ,Scrapy生成多个输出文件,每个输出文件中最多存储指定数量的项。

生成多个输出文件时,必须在提要URI中至少使用以下一个占位符来指示如何生成不同的输出文件名:

  • %(batch_time)s​ -在创建源时被时间戳替换(例如。 ​2020-03-28T14-45-08.237134​ )
  • %(batch_id)d -替换为批处理的从1开始的序列号。使用 printf-style string formatting 改变数字格式。例如,要根据需要引入前导零,使批次标识为5位数字,请使用 ​%(batch_id)05d​ (例如) ​3​ 变成 ​00003​ , ​123​ 变成 ​00123​ )

例如,如果您的设置包括:

FEED_EXPORT_BATCH_ITEM_COUNT = 100

你的呢 ​crawl​ 命令行是:

scrapy crawl spidername -o "dirname/%(batch_id)d-filename%(batch_time)s.json"

上面的命令行可以生成如下目录树:

->projectname
-->dirname
--->1-filename2020-03-28T14-45-08.237134.json
--->2-filename2020-03-28T14-45-09.148903.json
--->3-filename2020-03-28T14-45-10.046092.json

其中第一个和第二个文件正好包含100个项目。最后一个包含100个项目或更少。

注解 某些FTP服务器可能不支持附加到文件( APPE FTP命令)。S3 : True (附加 is not supported ) 标准输出 : False (不支持覆盖) store_empty :回到 FEED_STORE_EMPTY . uri_params :回到 FEED_URI_PARAMS .

FEED_URI_PARAMS

违约: ​None

包含函数导入路径的字符串,用于设置要应用的参数 printf-style string formatting 到源URI。

函数签名应如下所示:

scrapy.extensions.feedexport.uri_params(paramsspider)

返回A ​dict​ 要应用于提要URI的键值对 printf-style string formatting .

参数
  • params (dict) -- 特定的默认键值对:- batch_id: ID of the file batch. See ​FEED_EXPORT_BATCH_ITEM_COUNT​. If ​FEED_EXPORT_BATCH_ITEM_COUNT​ is 0batch_id is always 1. - batch_time: UTC date and time, in ISO format with : replaced with `` -.      看到了吗 :setting:`FEED_EXPORT_BATCH_ITEM_COUNT` .  - ``time : batch_time ,微秒设置为 0 .

  • spider (scrapy.spiders.Spider) -- 源蜘蛛的饲料项目

例如,包括 ​name​ 源URI中源蜘蛛的:

  1. 在项目的某个地方定义以下函数:# myproject/utils.py def uri_params(params, spider): return {**params, 'spider_name': spider.name}
  2. Point ​FEED_URI_PARAMS​ 到您设置中的函数::# myproject/settings.py FEED_URI_PARAMS = 'myproject.utils.uri_params'
  3. 使用 ​%(spider_name)s​ 在你的源URI中:scrapy crawl <spider_name> -o "%(spider_name)s.jl"
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号