【爬虫】Scrapy Feed Exports

2023-12-30 01:58
文章标签 scrapy 爬虫 exports feed

本文主要是介绍【爬虫】Scrapy Feed Exports,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【原文链接】https://doc.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-exports

 

Feed exports

New in version 0.10.

One of the most frequently required features when implementing scrapers is being 能够正确保存爬取下来的数据, 并且常常, 这意味着生成一个有爬取下来数据的 “导出文件” (通常被称为 “export feed”), 这个文件会被其他系统消费.

Scrapy 提供了这个功能 out of the box with the Feed Exports, which allows you to 利用多种序列化格式和存储后端用爬取到的 items 生成一个 feed.

序列化格式

Feed exports 使用 Item exporters 对于爬取到的数据进行序列化. These formats are supported out of the box:

  • JSON
  • JSON lines
  • CSV
  • XML

但是你也可以通过 FEED_EXPORTERS setting 扩展可支持的格式.

JSON

  • FEED_FORMATjson
  • Exporter used: JsonItemExporter
  • See this warning if you’re using JSON with large feeds.

JSON lines

  • FEED_FORMATjsonlines
  • Exporter used: JsonLinesItemExporter

CSV

  • FEED_FORMATcsv
  • Exporter used: CsvItemExporter
  • 想要指定要输出的列和输出顺序,使用 FEED_EXPORT_FIELDS. 其他 feed exporters 也可以使用这个选项, but it is important for CSV because unlike many other export formats CSV uses a fixed header.

XML

  • FEED_FORMATxml
  • Exporter used: XmlItemExporter

Pickle

  • FEED_FORMATpickle
  • Exporter used: PickleItemExporter

Marshal

  • FEED_FORMATmarshal
  • Exporter used: MarshalItemExporter

存储

当使用 feed exports 时,你要通过 URI (through the FEED_URI setting) 定义 feed 要存储在哪儿. Feed exports 支持多种存储后端类型,这些存储后端的类型是通过 URI schema 定义的.

The storages backends supported out of the box are:

  • Local filesystem
  • FTP
  • S3 (requires botocore or boto)
  • Standard output

如果所需的外部 libraries 不可用,有些存储后端也可能不可用. 比如 S3 后端只有在 botocore or boto library 安装了的情况下才可用 (Scrapy supports boto only on Python 2).

存储 URI 参数

存储 URI 也可以包含参数,这些参数会在 feed 被创建的时候被替换掉. These parameters are:

  • %(time)s - gets replaced by a timestamp when the feed is being created
  • %(name)s - gets replaced by the spider name

任何其他被命名的参数都会被爬虫的同名属性替换掉. 比如, 当 feed 被创建的时候 %(site_id)s 会被 spider.site_id 属性替换掉.

这里有一些用来展示的例子:

  • Store in FTP using one directory per spider:
    • ftp://user:password@ftp.example.com/scraping/feeds/%(name)s/%(time)s.json
  • Store in S3 using one directory per spider:
    • s3://mybucket/scraping/feeds/%(name)s/%(time)s.json

存储后端

本地文件系统

The feeds 存储在本地文件系统中.

  • URI scheme: file
  • Example URI: file:///tmp/export.csv
  • Required external libraries: none

注意仅对于本地文件系统存储来说你可以忽略 schema,使用像这样的绝对路径 /tmp/export.csv. 这仅适用于 Unix systems.

FTP

The feeds are stored in a FTP server.

  • URI scheme: ftp
  • Example URI: ftp://user:pass@ftp.example.com/path/to/export.csv
  • Required external libraries: none

S3

The feeds are stored on Amazon S3.

  • URI scheme: s3
  • Example URIs:
    • s3://mybucket/path/to/export.csv
    • s3://aws_key:aws_secret@mybucket/path/to/export.csv
  • Required external libraries: botocore (Python 2 and Python 3) or boto (Python 2 only)

AWS 证书可以作为 user/password 传递到 URI, 或者他们可以通过下列 settings 被传递:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

标准输出

The feeds are written to the standard output of the Scrapy process.

  • URI scheme: stdout
  • Example URI: stdout:
  • Required external libraries: none

Settings

These are the settings used for configuring the feed exports:

  • FEED_URI (mandatory)
  • FEED_FORMAT
  • FEED_STORAGES
  • FEED_EXPORTERS
  • FEED_STORE_EMPTY
  • FEED_EXPORT_ENCODING
  • FEED_EXPORT_FIELDS
  • FEED_EXPORT_INDENT

FEED_URI

Default: None

The URI of the export feed. See Storage backends for supported URI schemes.

This setting is required for enabling the feed exports.

FEED_FORMAT

The serialization format to be used for the feed. See Serialization formats for possible values.

FEED_EXPORT_ENCODING

Default: None

The encoding to be used for the feed.

如果不设置或者设置为 None (默认) 对除了 JSON输出外的所有输出会使用 UTF-8, which uses safe numeric encoding (\uXXXX sequences) for historic reasons.

Use utf-8 if you want UTF-8 for JSON too.

FEED_EXPORT_FIELDS

Default: None

要输出的一个 fields 列表, optional. Example: FEED_EXPORT_FIELDS = ["foo", "bar", "baz"].

使用 FEED_EXPORT_FIELDS 选项来定义要输出的 fields 和其输出顺序.

当 FEED_EXPORT_FIELDS 是空的或 None (默认) 时, Scrapy 使用字典定义的 fields 或爬虫 yield 的 Item 子类.

如果一个 exporter 需要一个固定的 fields 集合 (this is the case for CSV export format) and FEED_EXPORT_FIELDS is empty or None, 那么 Scrapy 会尝试通过 exported 数据获得 field 名字 - 目前它使用第一个 item 的 field 名字.

FEED_EXPORT_INDENT

Default: 0

每个 level 用来 indent 输出所需的 spaces. 如果 FEED_EXPORT_INDENT 是一个非负的整数, 那么数组元素和对象成员会使用这个 indent level 来被 pretty-printed. 如果 indent level 是 0 (默认), 或负数, 会让每个 item 占据一个新的行. None 选取的是最 compact representation.

现在只有 JsonItemExporterXmlItemExporter 实现, 比如当你将数据 export 到 .json or .xml.

FEED_STORE_EMPTY

Default: False

Whether to export empty feeds (ie. feeds with no items).

FEED_STORAGES

Default: {}

一个包含了附加的项目支持的 feed 存储后端的字典. 键是 URI schemes and the 值是存储类的路径.

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',
}

A dict containing the built-in feed storage backends supported by Scrapy. You can disable any of these backends by assigning None to their URI scheme in FEED_STORAGES. E.g., to disable the built-in FTP storage backend (without replacement), place this in your settings.py:

FEED_STORAGES = {'ftp': None,
}

FEED_EXPORTERS

Default: {}

A dict containing additional exporters supported by your project. The keys are serialization formats and the values are paths to Item exporter classes.

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',
}

A dict containing the built-in feed exporters supported by Scrapy. 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,
}

这篇关于【爬虫】Scrapy Feed Exports的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551366

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

BUYING FEED(贪心+树状动态规划)

BUYING FEED 时间限制: 3000 ms  |  内存限制: 65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up K (1 <= K <= 100)pounds of feed. Driving D miles with K pounds of feed in his truck costs D

Redis应用之Feed流关注推送

我的博客大纲 我的后端学习大纲 -------------------------------------------------------------------------------------------------------------------------------------------------# 3.好友关注: 3.1.关注和取关: a.接口说明:

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬