返回介绍

7.1 指定如何导出数据

发布于 2024-02-05 21:13:20 字数 3195 浏览 0 评论 0 收藏 0

在导出数据时,需向Scrapy爬虫提供以下信息:

导出文件路径。

导出数据格式(即选用哪个Exporter)。

可以通过以下两种方式指定爬虫如何导出数据:

(1)通过命令行参数指定。

(2)通过配置文件指定。

7.1.1 命令行参数

在运行scrapy crawl命令时,可以分别使用-o和-t参数指定导出文件路径以及导出数据格式。

在第1章example项目中,我们使用以下命令运行爬虫:

$ scrapy crawl books -o books.csv
...
$ head -10 books.csv # 查看文件开头的10 行
name,price
A Light in the Attic,£51.77
Tipping the Velvet,£53.74
Soumission,£50.10
Sharp Objects,£47.82
Sapiens: A Brief History of Humankind,£54.23
The Requiem Red,£22.65
The Dirty Little Secrets of Getting Your Dream Job,£33.34
"The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria
Woodhull",£17.93
The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin
Olympics,£22.60

其中,-o books.csv指定了导出文件的路径,在这里虽然没有使用-t参数指定导出数据格式,但Scrapy爬虫通过文件后缀名推断出我们想以csv作为导出数据格式。同样的道理,如果将参数改为-o books.json,Scrapy爬虫就会以json作为导出数据格式。

需要明确地指定导出数据格式时,使用-t参数,例如:

$ scrapy crawl books -t csv -o books1.data
...
$ scrapy crawl books -t json -o books2.data
...
$ scrapy crawl books -t xml -o books3.data
...

运行以上命令后,Scrapy爬虫会以-t参数中的数据格式字符串(如csv、json、xml)为键,在配置字典FEED_EXPORTERS中搜索Exporter,FEED_EXPORTERS的内容由以下两个字典的内容合并而成:

默认配置文件中的FEED_EXPORTERS_BASE。

用户配置文件中的FEED_EXPORTERS。

前者包含内部支持的导出数据格式,后者包含用户自定义的导出数据格式。以下是Scrapy源码中定义的FEED_EXPORTERS_BASE,它位于scrapy.settings.default_settings模块:

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

如果用户添加了新的导出数据格式(即实现了新的Exporter),可在配置文件settings.py中定义FEED_EXPORTERS,例如:

FEED_EXPORTERS = {'excel': 'my_project.my_exporters.ExcelItemExporter'}

另外,指定导出文件路径时,还可以使用%(name)s和%(time)s两个特殊变量:

%(name)s:会被替换为Spider的名字。

%(time)s:会被替换为文件创建时间。

请看一个例子,假设一个项目中有爬取书籍信息、游戏信息、新闻信息的3个Spider,分别名为'books'、'games'、'news'。对于任意Spider的任意一次爬取,都可以使用'export_data/%(name)s/%(time)s.csv'作为导出路径,Scrapy爬虫会依据Spider的名字和爬取的时间点创建导出文件:

使用命令行参数指定如何导出数据很方便,但命令行参数只能指定导出文件路径以及导出数据格式,并且每次都在命令行里输入很长的参数让人很烦躁,使用配置文件可以弥补这些不足。

7.1.2 配置文件

接下来,我们学习在配置文件中指定如何导出数据。下面依次说明几个常用选项:

FEED_URI

导出文件路径。

FEED_URI = 'export_data/%(name)s.data'

FEED_FORMAT

导出数据格式。

FEED_FORMAT = 'csv'

FEED_EXPORT_ENCODING

导出文件编码(默认情况下json文件使用数字编码,其他使用utf-8编码)。

FEED_EXPORT_ENCODING = 'gbk'

FEED_EXPORT_FIELDS

导出数据包含的字段(默认情况下导出所有字段),并指定次序。

FEED_EXPORT_FIELDS = ['name', 'author', 'price']

FEED_EXPORTERS

用户自定义Exporter字典,添加新的导出数据格式时使用。

FEED_EXPORTERS = {'excel': 'my_project.my_exporters.ExcelItemExporter'}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文