scrapy 2.3 Feed导出设置
设置
以下是用于配置源导出的设置:
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
(params, spider)-
返回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
is0
,batch_id
is always1
. -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中源蜘蛛的:
- 在项目的某个地方定义以下函数:# myproject/utils.py def uri_params(params, spider): return {**params, 'spider_name': spider.name}
- Point
FEED_URI_PARAMS
到您设置中的函数::# myproject/settings.py FEED_URI_PARAMS = 'myproject.utils.uri_params' - 使用
%(spider_name)s
在你的源URI中:scrapy crawl <spider_name> -o "%(spider_name)s.jl"
更多建议: