饲料出口¶
0.10 新版功能.
实现刮刀时最常需要的特征之一是能够正确地存储所刮取的数据,并且经常意味着使用被刮除的数据(通常称为“输出进给”)生成要由其他系统消耗的“导出文件” 。
Scrapy使用Feed导出功能即时提供此功能,这允许您使用多个序列化格式和存储后端来生成包含已抓取项目的Feed。
序列化格式¶
为了序列化抓取的数据,Feed导出使用 项目出口商。这些格式是开箱即用的:
但您也可以通过 FEED_EXPORTERS
设置扩展支持的格式。
JSON¶
FEED_FORMAT
:json
使用的出口商:
JsonItemExporter
如果您对大型Feed使用JSON,请参阅 这个警告。
JSON行¶
FEED_FORMAT
:jsonlines
使用的出口商:
JsonLinesItemExporter
CSV¶
FEED_FORMAT
:csv
使用的出口商:
CsvItemExporter
要指定要导出的列及其顺序,请使用
FEED_EXPORT_FIELDS
。其他Feed导出程序也可以使用此选项,但它对CSV很重要,因为与许多其他导出格式不同,CSV使用固定标头。
XML¶
FEED_FORMAT
:xml
使用的出口商:
XmlItemExporter
泡菜¶
FEED_FORMAT
:pickle
使用的出口商:
PickleItemExporter
元帅¶
FEED_FORMAT
:marshal
使用的出口商:
MarshalItemExporter
存储¶
使用Feed导出时,您可以使用 URI (通过 FEED_URI
设置)定义在哪里存储Feed。 Feed导出支持由URI方案定义的多个存储后端类型。
支持开箱即用的存储后端包括:
如果所需的外部库不可用,则某些存储后端可能无法使用。例如,S3后端仅在安装了 botocore 或 boto 库时可用(Scrapy仅在Python 2上支持 boto)。
存储URI参数¶
存储URI还可以包含在创建订阅源时被替换的参数。这些参数是:
%(time)s
- 在创建订阅源时被时间戳替换
%(name)s
- 被蜘蛛名替换
任何其他命名参数将替换为同名的spider属性。例如,在创建订阅源的那一刻,%(site_id)s
将被 spider.site_id
属性替换。
这里有一些例子来说明:
存储在FTP中使用每个蜘蛛一个目录:
ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
存储在S3使用每个蜘蛛一个目录:
s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
存储后端¶
本地文件系统¶
订阅源存储在本地文件系统中。
URI方案:
file
示例URI:
file:///tmp/export.csv
所需的外部库:none
请注意,对于本地文件系统存储(仅),如果指定绝对路径(如 /tmp/export.csv
),则可以省略该方案。这只适用于Unix系统。
设置¶
这些是用于配置Feed导出的设置:
FEED_EXPORT_ENCODING¶
默认值:None
要用于Feed的编码。
如果取消设置或设置为 None
(默认),则除了JSON输出之外的所有内容都使用UTF-8,由于历史原因,它使用安全数字编码(\uXXXX
序列)。
使用 utf-8
,如果你也想要UTF-8的JSON。
FEED_EXPORT_FIELDS¶
默认值:None
要导出的字段的列表,可选。示例:FEED_EXPORT_FIELDS = ["foo", "bar", "baz"]
。
使用FEED_EXPORT_FIELDS选项定义要导出的字段及其顺序。
当FEED_EXPORT_FIELDS为空或无(默认)时,Scrapy使用在定义的字段中定义的字段或蜘蛛正在产生的 Item
子类。
如果导出器需要一组固定的字段(CSV 导出格式为这种情况),并且FEED_EXPORT_FIELDS为空或无,则Scrapy尝试从导出的数据中推断字段名称 - 当前它使用第一个项目中的字段名称。
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支持的内置Feed存储后端的字典。您可以通过在 FEED_STORAGES
中将 None
分配给其URI方案来禁用任何这些后端。例如,要禁用内置FTP存储后端(无替换),请将其放在您的 settings.py
中:
FEED_STORAGES = {
'ftp': None,
}
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支持的内置feed导出器的dict。您可以在 FEED_EXPORTERS
中通过将 None
分配给它们的序列化格式来禁用任何这些导出器。例如,要禁用内置的CSV导出器(无替换),请将其放在您的 settings.py
中:
FEED_EXPORTERS = {
'csv': None,
}