Feed exports¶
New in version 0.10.
实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的”输出文件”(通常叫做”输出feed”),来供其他系统使用。
Scrapy自带了Feed输出,并且支持多种序列化格式(serialization format)及存储方式(storage backends)。
序列化方式(Serialization formats)¶
用于序列化所爬取的数据,feed exports使用Item exporters。原生支持这些格式︰
您也可以通过 FEED_EXPORTERS
设置扩展支持的属性。
JSON¶
FEED_FORMAT
:json
- 使用的Exporter:
JsonItemExporter
- 大数据量情况下使用JSON请参见 这个警告
JSON lines¶
FEED_FORMAT
:jsonlines
- Exporter used:
JsonLinesItemExporter
CSV¶
FEED_FORMAT
:csv
- Exporter used:
CsvItemExporter
- To specify columns to export and their order use
FEED_EXPORT_FIELDS
. Other feed exporters can also use this option, but it is important for CSV because unlike many other export formats CSV uses a fixed header.
XML¶
FEED_FORMAT
:xml
- Exporter used:
XmlItemExporter
Pickle¶
FEED_FORMAT
:pickle
- Exporter used:
PickleItemExporter
Marshal¶
FEED_FORMAT
:marshal
- 使用的exporter:
MarshalItemExporter
存储(Storages)¶
使用feed输出时您可以通过使用 URI(通过 FEED_URI
设置) 来定义存储端。 feed输出支持URI方式支持的多种存储后端类型。
自带支持的存储后端有:
有些存储后端会因所需的外部库未安装而不可用。 例如,S3只有在 botocore或boto库安装的情况下才可使用(Scrapy只支持Python 2上的boto)。
存储URI参数¶
存储URI也包含参数。 当feed被创建时这些参数可以被覆盖:
%(time)s
- 当feed被创建时被timestamp覆盖%(name)s
- 被spider的名字覆盖
其他命名的参数会被spider同名的属性所覆盖。 例如, 当feed被创建时, %(site_id)s
将会被 spider.site_id
属性所覆盖。
下面用一些例子来说明:
- 存储在FTP,每个spider一个目录:
ftp://user:[email protected]/scraping/feeds/%(name)s/%(time)s.json
- 存储在S3,每一个spider一个目录:
s3://mybucket/scraping/feeds/%(name)s/%(time)s.json
存储端(Storage backends)¶
本地文件系统¶
将feed存储在本地系统。
- URI scheme:
file
- URI样例:
file:///tmp/export.csv
- 需要的外部依赖库: none
注意: (只有)存储在本地文件系统时,您可以指定一个绝对路径 /tmp/export.csv
并忽略协议(scheme)。 不过这仅仅只能在Unix系统中工作。
FTP¶
将feed存储在FTP服务器。
- URI scheme:
ftp
- URI样例:
ftp://user:[email protected]/path/to/export.csv
- 需要的外部依赖库: none
设定(Settings)¶
这些是配置feed输出的设定:
FEED_FORMAT¶
输出feed的序列化格式。 可用的值请参见 序列化方式(Serialization formats) 。
FEED_EXPORT_ENCODING¶
Default: None
The encoding to be used for the feed.
If unset or set to None
(default) it uses UTF-8 for everything except JSON output, which uses safe numeric encoding (\uXXXX
sequences) for historic reasons.
Default: None
FEED_EXPORT_FIELDS¶
Default: None
包含项目支持的额外feed存储端的字典。 Example: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"]
.
使用FEED_EXPORT_FIELDS选项可以定义输出的字段和它们的顺序。
When FEED_EXPORT_FIELDS is empty or None (default), Scrapy uses fields defined in dicts or Item
subclasses a spider is yielding.
If an exporter requires a fixed set of fields (this is the case for CSV export format) and FEED_EXPORT_FIELDS is empty or None, then Scrapy tries to infer field names from the exported data - currently it uses field names from the first item.
FEED_STORAGES¶
Default:: {}
包含项目支持的额外输出器(exporter)的字典。 字典的键(key)是URI协议(scheme),值是存储类(storage class)的路径。
FEED_STORAGES_BASE¶
Default:
{
'': '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存储端的字典。 You can disable any of these backends by assigning None
to their URI scheme in FEED_STORAGES
. Default:: {}
FEED_STORAGES = {
'ftp': None,
}
FEED_EXPORTERS¶
Default: {}
包含项目支持的额外输出器(exporter)的字典。 该字典的键(key)是URI协议(scheme),值是 Item输出器(exporter) 类的路径。
FEED_EXPORTERS_BASE¶
Default:
{
'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 Exporter的字典。You can disable any of these exporters by assigning None
to their serialization format in FEED_EXPORTERS
. E.g., to disable the built-in CSV exporter (without replacement), place this in your settings.py
:
FEED_EXPORTERS = {
'csv': None,
}