Scrapy爬虫入门教程十 Feed exports(导出文件)

Python版本管理:pyenv和pyenv-virtualenv
Scrapy爬虫入门教程一 安装和基本使用
Scrapy爬虫入门教程二 官方提供Demo
Scrapy爬虫入门教程三 命令行工具介绍和示例
Scrapy爬虫入门教程四 Spider(爬虫)
Scrapy爬虫入门教程五 Selectors(选择器)
Scrapy爬虫入门教程六 Items(项目)
Scrapy爬虫入门教程七 Item Loaders(项目加载器)
Scrapy爬虫入门教程八 交互式 shell 方便调试
Scrapy爬虫入门教程九 Item Pipeline(项目管道)
Scrapy爬虫入门教程十 Feed exports(导出文件)
Scrapy爬虫入门教程十一 Request和Response(请求和响应)
Scrapy爬虫入门教程十二 Link Extractors(链接提取器)

开发环境:
Python 3.6.0 版本 (当前最新)
Scrapy 1.3.2 版本 (当前最新)

导出文件

新版本0.10。

实现爬虫时最常需要的特征之一是能够正确地存储所过滤的数据,并且经常意味着使用被过滤的数据(通常称为“export feed”)生成要由其他系统消耗的“导出文件” 。

Scrapy使用Feed导出功能即时提供此功能,这允许您使用多个序列化格式和存储后端来生成包含已抓取项目的Feed。

序列化格式

为了序列化抓取的数据,Feed导出使用项导出器。这些格式是开箱即用的:

但您也可以通过FEED_EXPORTERS设置扩展支持的格式 。

JSON

  • FEED_FORMAT: json
  • 使用出口: JsonItemExporter
  • 如果您对大型Feed使用JSON,请参阅此警告

JSON lines

  • FEED_FORMAT: jsonlines
  • 使用出口: JsonLinesItemExporter

CSV

  • FEED_FORMAT: csv
  • 使用出口: CsvItemExporter
  • 指定要导出的列及其顺序使用 FEED_EXPORT_FIELDS。其他Feed导出程序也可以使用此选项,但它对CSV很重要,因为与许多其他导出格式不同,CSV使用固定标头。

XML

  • FEED_FORMAT: xml
  • 使用出口: XmlItemExporter

Pickle

  • FEED_FORMAT: pickle
  • 使用出口: PickleItemExporter

Marshal

  • FEED_FORMAT: marshal
  • 使用出口: MarshalItemExporter

存储

使用Feed导出时,您可以使用URI(通过FEED_URI设置)定义在哪里存储Feed 。Feed导出支持由URI方案定义的多个存储后端类型。

支持开箱即用的存储后端包括:

如果所需的外部库不可用,则某些存储后端可能无法使用。例如,S3后端仅在安装了botocoreboto库时可用(Scrapy仅支持boto到Python 2)。


存储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系统。

FTP

订阅源存储在FTP服务器中。

  • URI方案: ftp
  • 示例URI: ftp://user:pass@ftp.example.com/path/to/export.csv
  • 所需的外部库:none

S3

订阅源存储在Amazon S3上。

  • URI方案: s3
  • 示例URI:
  • s3://mybucket/path/to/export.csv
  • s3://aws_key:aws_secret@mybucket/path/to/export.csv
  • 所需的外部库:botocore或boto

AWS凭证可以作为URI中的用户/密码传递,也可以通过以下设置传递:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

标准输出

Feed被写入Scrapy进程的标准输出。

  • URI方案: stdout
  • 示例URI: stdout:
  • 所需的外部库:none

设置

这些是用于配置Feed导出的设置:

  • FEED_URI (强制性)
  • FEED_FORMAT
  • FEED_STORAGES
  • FEED_EXPORTERS
  • FEED_STORE_EMPTY
  • FEED_EXPORT_ENCODING
  • FEED_EXPORT_FIELDS

FEED_URI

默认: None

导出Feed的URI。请参阅支持的URI方案的存储后端。

启用Feed导出时需要此设置。

FEED_FORMAT

要用于Feed的序列化格式。有关可能的值,请参阅 序列化格式。

FEED_EXPORT_ENCODING

默认: None

要用于Feed的编码。

如果取消设置或设置为None(默认),它使用UTF-8除了JSON输出,\uXXXX由于历史原因使用安全的数字编码(序列)。

使用utf-8,如果你想UTF-8 JSON了。

FEED_EXPORT_FIELDS

默认: None

要导出的字段的列表,可选。示例:。FEED_EXPORT_FIELDS = ["foo", "bar", "baz"]

使用FEED_EXPORT_FIELDS选项定义要导出的字段及其顺序。

当FEED_EXPORT_FIELDS为空或无(默认)时,Scrapy使用在Item蜘蛛正在产生的dicts 或子类中定义的字段。

如果导出器需要一组固定的字段(CSV导出格式为这种情况 ),并且FEED_EXPORT_FIELDS为空或无,则Scrapy会尝试从导出的​​数据中推断字段名称 - 当前它使用第一个项目中的字段名称。

FEED_STORE_EMPTY

默认: False

是否导出空Feed(即,没有项目的Feed)。

FEED_STORAGES
默认: {}

包含您的项目支持的其他Feed存储后端的字典。键是URI方案,值是存储类的路径。

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存储后端的字典。您可以通过分配其中None的URI方案 来禁用这些后端FEED_STORAGES。例如,要禁用内置FTP存储后端(无替换),请将其放置在settings.py:

FEED_STORAGES = {
    'ftp': None,
}

FEED_EXPORTERS

默认: {}

包含您的项目支持的其他导出器的字典。键是序列化格式,值是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支持的内置feed导出器的dict。您可以通过分配其中None的序列化格式来禁用任何这些导出器FEED_EXPORTERS。例如,要禁用内置的CSV导出器(无替换),请将其放置在settings.py:

FEED_EXPORTERS = {
    'csv': None,
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容