- 初窥Scrapy
- 安装指南
- Scrapy入门教程
- 例子
- 命令行工具(Command line tools)
- Items
- Spiders
- 选择器(Selectors)
- Item Loaders
- Scrapy终端(Scrapy shell)
- Item Pipeline
- Feed exports
- Link Extractors
- Logging
- 数据收集(Stats Collection)
- 发送email
- Telnet终端(Telnet Console)
- Web Service
- 常见问题(FAQ)
- 调试(Debugging)Spiders
- Spiders Contracts
- 实践经验(Common Practices)
- 通用爬虫(Broad Crawls)
- 借助Firefox来爬取
- 使用Firebug进行爬取
- 调试内存溢出
- 下载项目图片
- Ubuntu 软件包
- Scrapyd
- 自动限速(AutoThrottle)扩展
- Benchmarking
- Jobs: 暂停,恢复爬虫
- DjangoItem
- 架构概览
- 下载器中间件(Downloader Middleware)
- Spider中间件(Middleware)
- 扩展(Extensions)
- 核心API
- Requests and Responses
- Settings
- 信号(Signals)
- 异常(Exceptions)
- Item Exporters
- Release notes
- Contributing to Scrapy
- Versioning and API Stability
- 试验阶段特性
- 索引
- Python 模块索引
Feed exports
0.10 新版功能.
实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的”输出文件”(通常叫做”输出feed”),来供其他系统使用。
Scrapy自带了Feed输出,并且支持多种序列化格式(serialization format)及存储方式(storage backends)。
序列化方式(Serialization formats)
feed输出使用到了 Item exporters 。其自带支持的类型有:
- JSON
- JSON lines
- CSV
- XML
您也可以通过 FEED_EXPORTERS 设置扩展支持的属性。
JSON
- FEED_FORMAT: json
- 使用的exporter: JsonItemExporter
- 大数据量情况下使用JSON请参见 这个警告
JSON lines
- FEED_FORMAT: jsonlines
- 使用的exporter: JsonLinesItemExporter
CSV
- FEED_FORMAT: csv
- 使用的exporter: CsvItemExporter
XML
- FEED_FORMAT: xml
- 使用的exporter: XmlItemExporter
Pickle
- FEED_FORMAT: pickle
- 使用的exporter: PickleItemExporter
Marshal
- FEED_FORMAT: marshal
- 使用的exporter: MarshalItemExporter
存储(Storages)
使用feed输出时您可以通过使用 URI (通过 FEED_URI 设置) 来定义存储端。 feed输出支持URI方式支持的多种存储后端类型。
自带支持的存储后端有:
- 本地文件系统
- FTP
- S3 (需要 boto)
- 标准输出
有些存储后端会因所需的外部库未安装而不可用。例如,S3只有在 boto 库安装的情况下才可使用。
存储URI参数
存储URI也包含参数。当feed被创建时这些参数可以被覆盖:
- %(time)s - 当feed被创建时被timestamp覆盖
- %(name)s - 被spider的名字覆盖
其他命名的参数会被spider同名的属性所覆盖。例如, 当feed被创建时, %(site_id)s 将会被 spider.site_id 属性所覆盖。
下面用一些例子来说明:
- 存储在FTP,每个spider一个目录:
- ftp://user:password@ftp.example.com/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:pass@ftp.example.com/path/to/export.csv
- 需要的外部依赖库: none
S3
将feed存储在 Amazon S3 。
- URI scheme: s3
- URI样例:
- s3://mybucket/path/to/export.csv
- s3://aws_key:aws_secret@mybucket/path/to/export.csv
- 需要的外部依赖库: boto
您可以通过在URI中传递user/pass来完成AWS认证,或者也可以通过下列的设置来完成:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
标准输出
feed输出到Scrapy进程的标准输出。
- URI scheme: stdout
- URI样例: stdout:
- 需要的外部依赖库: none
设定(Settings)
这些是配置feed输出的设定:
- FEED_URI (必须)
- FEED_FORMAT
- FEED_STORAGES
- FEED_EXPORTERS
- FEED_STORE_EMPTY
FEED_URI
Default: None
输出feed的URI。支持的URI协议请参见 存储端(Storage backends) 。
为了启用feed输出,该设定是必须的。
FEED_FORMAT
输出feed的序列化格式。可用的值请参见 序列化方式(Serialization formats) 。
FEED_STORE_EMPTY
Default: False
是否输出空feed(没有item的feed)。
FEED_STORAGES
Default:: {}
包含项目支持的额外feed存储端的字典。 字典的键(key)是URI协议(scheme),值是存储类(storage class)的路径。
FEED_STORAGES_BASE
Default:
{ '': 'scrapy.contrib.feedexport.FileFeedStorage', 'file': 'scrapy.contrib.feedexport.FileFeedStorage', 'stdout': 'scrapy.contrib.feedexport.StdoutFeedStorage', 's3': 'scrapy.contrib.feedexport.S3FeedStorage', 'ftp': 'scrapy.contrib.feedexport.FTPFeedStorage', }
包含Scrapy内置支持的feed存储端的字典。
FEED_EXPORTERS
Default:: {}
包含项目支持的额外输出器(exporter)的字典。 该字典的键(key)是URI协议(scheme),值是 Item输出器(exporter) 类的路径。
FEED_EXPORTERS_BASE
Default:
FEED_EXPORTERS_BASE = { 'json': 'scrapy.contrib.exporter.JsonItemExporter', 'jsonlines': 'scrapy.contrib.exporter.JsonLinesItemExporter', 'csv': 'scrapy.contrib.exporter.CsvItemExporter', 'xml': 'scrapy.contrib.exporter.XmlItemExporter', 'marshal': 'scrapy.contrib.exporter.MarshalItemExporter', }
包含Scrapy内置支持的feed输出器(exporter)的字典。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论