7.1 指定如何导出数据
在导出数据时,需向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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论