译者:OSGeo 中国
0.10 新版功能.
在实现scraper时,最经常需要的功能之一是能够正确地存储被抓取的数据,这通常意味着用被抓取的数据(通常称为“导出提要”)生成一个“导出文件”,供其他系统使用。
Scrapy随提要导出一起提供了开箱即用的功能,它允许您使用多个序列化格式和存储后端生成带有已擦除项的提要。
序列化格式
为了序列化抓取的数据,提要导出使用 Item exporters . 开箱即用支持这些格式:
但是您也可以通过 FEED_EXPORTERS
设置。
JSON
FEED_FORMAT
:json
- 出口商:
JsonItemExporter
- 见 this warning 如果您使用的是大型提要的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
设置)。提要导出支持由URI方案定义的多个存储后端类型。
开箱支持的存储后端包括:
如果所需的外部库不可用,则某些存储后端可能不可用。例如,只有在安装了botocore_u或boto_u库的情况下,S3后端才可用(scrapy仅在python 2上支持boto_u)。
存储URI参数
存储URI还可以包含在创建源时被替换的参数。这些参数是:
%(time)s
-在创建源时被时间戳替换%(name)s
-替换为 Spider 名称
任何其他命名参数都将被同名的spider属性替换。例如, %(site_id)s
将被替换为 spider.site_id
属性为正在创建源的时刻。
下面举例说明:
使用每个spider一个目录存储在ftp中:
ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
使用每个spider一个目录存储在S3中:
s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
存储后端
本地文件系统
源存储在本地文件系统中。
- URI方案:
file
- 示例性URI:
file:///tmp/export.csv
- 所需外部库:无
请注意,对于本地文件系统存储(仅限),如果您指定类似 /tmp/export.csv
. 不过,这只在UNIX系统上工作。
FTP
这些提要存储在FTP服务器中。
- URI方案:
ftp
- 示例性URI:
ftp://user:pass@ftp.example.com/path/to/export.csv
- 所需外部库:无
S3
源存储在 Amazon S3 .
AWS凭证可以作为用户/密码在URI中传递,也可以通过以下设置传递:
还可以使用此设置为导出的源定义自定义ACL:
标准输出
进料被写入废料处理的标准输出。
- URI方案:
stdout
- 示例性URI:
stdout:
- 所需外部库:无
设置
以下是用于配置源导出的设置:
FEED_URI
违约: None
导出源的URI。见 存储后端 用于支持的URI方案。
启用源导出需要此设置。
FEED_FORMAT
要用于源的序列化格式。见 序列化格式 对于可能的值。
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为空或无时(默认),scrappy使用dicts或 Item
Spider 正在屈服的亚纲。
如果导出器需要一组固定的字段(这是 CSV export format)和feedexport字段为空或无,然后scrapy尝试从导出的数据中推断字段名-当前它使用第一个项目中的字段名。
FEED_EXPORT_INDENT
违约: 0
用于在每个级别上缩进输出的空间量。如果 FEED_EXPORT_INDENT
是非负整数,则数组元素和对象成员将以该缩进级别进行漂亮打印。缩进量 0
(默认值)或负数,将把每个项目放到一个新行上。 None
选择最紧凑的表示形式。
当前仅由执行 JsonItemExporter
和 XmlItemExporter
,即当您要导出到 .json
或 .xml
.
FEED_STORE_EMPTY
违约: False
是否导出空源(即没有项目的源)。
FEED_STORAGES
违约: {{}}
包含项目支持的其他提要存储后端的dict。键是URI方案,值是指向存储类的路径。
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,
}