赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
精通Scrapy爬虫:25、Scrapy模拟登录
精通Scrapy爬虫:24、登录实质
精通Scrapy爬虫:23、项目实战:下载360图片
精通Scrapy爬虫:22、项目实战:爬取matplotlib例子源码文件
精通Scrapy爬虫:21、下载文件和图片:FilesPipeline和ImagesPipeline
精通Scrapy爬虫:20、项目练习
精通Scrapy爬虫:16、使用LinkExtractor提取链接
精通Scrapy爬虫:19、Exporter添加导出数据格式
精通Scrapy爬虫:18、使用Exporter导出数据
精通Scrapy爬虫:17、LinkExtractor描述提取规则
精通Scrapy爬虫:15、将数据存入MongoDB
精通Scrapy爬虫:14、过滤重复数据
精通Scrapy爬虫:13、Item Pipeline
精通Scrapy爬虫:12、Field元数据
精通Scrapy爬虫:11、Item和Field
精通Scrapy爬虫:10、CSS选择器
精通Scrapy爬虫:9、XPath
精通Scrapy爬虫:8、Response内置Selector
精通Scrapy爬虫:7、Selector对象
精通Scrapy爬虫:6、Spider开发流程
精通Scrapy爬虫:5、Request和Response对象
精通Scrapy爬虫:4、Scrapy框架结构及工作原理
精通Scrapy爬虫:3、编写第一个Scrapy爬虫
精通Scrapy爬虫:2、Scrapy简介及安装
精通Scrapy爬虫:1、网络爬虫是什么
精通Scrapy爬虫:18、使用Exporter导出数据
资源编号:75948
精通Scrapy
爬虫
热度:25
通过之前章节的学习,大家掌握了Scrapy中爬取数据、封装数据、处理数据的相关技术,本章我们来学习如何将爬取到的数据以某种数据格式保存到文件中,即导出数据。
通过之前章节的学习,大家掌握了Scrapy中爬取数据、封装数据、处理数据的相关技术,本章我们来学习如何将爬取到的数据以某种数据格式保存到文件中,即导出数据。 在Scrapy中,负责导出数据的组件被称为Exporter(导出器),Scrapy内部实现了多个Exporter,每个Exporter实现一种数据格式的导出,支持的数据格式如下(括号中为相应的Exporter): (1)JSON (JsonItemExporter) (2)JSON lines (JsonLinesItemExporter) (3)CSV (CsvItemExporter) (4)XML (XmlItemExporter) (5)Pickle (PickleItemExporter) (6)Marshal (MarshalItemExporter) 其中,前4种是极为常用的文本数据格式,而后两种是Python特有的。在大多数情况下,使用Scrapy内部提供的Exporter就足够了,需要以其他数据格式(上述6种以外)导出数据时,可以自行实现Exporter。 在导出数据时,需向Scrapy爬虫提供以下信息: ● 导出文件路径。 ● 导出数据格式(即选用哪个Exporter)。 可以通过以下两种方式指定爬虫如何导出数据: (1)通过命令行参数指定。 (2)通过配置文件指定。 # 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的名字和爬取的时间点创建导出文件: 使用命令行参数指定如何导出数据很方便,但命令行参数只能指定导出文件路径以及导出数据格式,并且每次都在命令行里输入很长的参数让人很烦躁,使用配置文件可以弥补这些不足。 # 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'}