实现爬虫时最经常提到的需求就是能合适的保存爬取到的数据,或者说,生成一个带有爬取数据的“输出文件”(通常叫“输出 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 输出时可以通过使用 URL(通过 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',
}

包含 Scrpay 内置支持的 feed 输出器(exporter)的字典。

爬虫:Scrapy9 - Feed exports的更多相关文章

  1. Scrapy笔记:持久化,Feed exports的使用

    首先要明确的是,其实所有的FeedExporter都是类,里面封装了一般进行io操作的方法.因此,要怎么输出呢?其实从技术实现来说,在生成item的每一步调用其进行储存都是可以的,只不过为了更加符合s ...

  2. scrapy爬虫框架入门教程

    scrapy安装请参考:安装指南. 我们将使用开放目录项目(dmoz)作为抓取的例子. 这篇入门教程将引导你完成如下任务: 创建一个新的Scrapy项目 定义提取的Item 写一个Spider用来爬行 ...

  3. python爬虫框架scrapy初识(一)

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.所谓网络爬虫,就是一个在网上到处或定向抓取数据的 ...

  4. Scrapy 爬虫框架入门案例详解

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...

  5. Python爬虫知识点四--scrapy框架

    一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...

  6. 97、爬虫框架scrapy

    本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息   一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...

  7. [原创]手把手教你写网络爬虫(4):Scrapy入门

    手把手教你写网络爬虫(4) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 上期我们理性的分析了为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 咦?怎么有人扔西红柿 ...

  8. python3 分布式爬虫

    背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.py ...

  9. [爬虫]scrapy框架

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据 ...

随机推荐

  1. 【洛谷P1962】斐波那契数列

    斐波那契数列 题目链接:https://www.luogu.org/problemnew/show/P1962 矩阵A 1,1 1,0 用A^k即可求出feb(k). 矩阵快速幂 #include&l ...

  2. HttpWebRequest类之基本定义

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...

  3. Ext4.2 select 和 query 区别与联系

    Ext.query和Ext.select的作用是一致的,同是根据CSS选择符查找出一个或多个元素.区别在于返回类型上.分别是:query方法返回的是JavaScript标准的数组类型:select方法 ...

  4. js 图片库 改进版

    平稳退化 js与html标记分离? 如果有两个函数:firstFunction和secondFunction,如果想让它们俩都在页面加载时得到执行,可以调用函数addLoadEvent,只有一个参数, ...

  5. C#获取包括一二级汉字的拼音 首字母

    C#获取包括一二级汉字的拼音 首字母 声母 汉字拼音转换 using System; using System.Collections.Generic; using System.Linq; usin ...

  6. Session和cookic

    session是无状态的方式,服务器存储机制,当用户第一次请求服务器,服务器会给客户分配一个标识id,客户端再次访问服务器,根据session id 去访问服务器数据库,返回信息,同时session ...

  7. JavaScript变量不同类型之间的自动、手动类型转换

    转换成字符型:toString() var str = 123; str.toString();转换成字符串 将str从数值型变成字符型       浮点数:         电脑在运算过程中以正确的 ...

  8. Eclipse搭建SpringBoot

    第一种方法(不建议) 首先新建Maven工程 勾选第一个按钮,第三个是选择working set ,你可以不选 下一步,配置工程信息,注意打包为jar 打开pom.xml文件,添加spring-boo ...

  9. python__基础 : sys模块: sys.argv与sys.path

    sys模块中的 argv 保存的是当你运行一个py文件的时候给他传递进去的参数,如: import sys a = sys.argv print(a) # 当在命令行中调用这个py文件: > p ...

  10. PLC状态机编程第二篇-负载均衡

    控制任务 大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机.我们的控制任务如下: 真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容 ...