数据保存
在scrapy中负责数据导出的组件被称作Exporter,scrapy支持的数据导出格式有:json、json lines、csv、XML、pickle、Marshal
如果想使用其他的格式不如Excel,可以通过重写Exporter来实现(小编一般都通过管道的方式)
scrapy中数据保存可以使用两种方式:
命令方式:scrapy crawl 标识 -t 格式 -o 文件名
配置文件方式:Exporter方式和管道的方式
命令方式
scrapy crawl 标识 -t 文件格式 -o 文件名/%(name)s/%(time)s.csv
#%(name)s:spider的名
#%(time)s:时间
配置文件方式
在settings.py文件中指定
FEED_URI = 'data/%(name)s.data'
FEED_FORMAT = 'json'
FEED_EXPORT_ENCODING = 'utf-8'
FEED_EXPORT_FIELDS = ['bookname', 'bookprice']
#说明
FEED_URI :保存文件路径
FEED_FORMAT :保存文件的格式
FEED_EXPORT_ENCODING :保存文件的编码格式,json默认使用数字编码,其他都是utf-8
FEED_EXPORT_FIELDS :输出字段次序
另一种管道方式下小节说
管道
管道(item Pipeline):主要作用就是处理抓取的数据。当数据转化为item后,会传递到item Pipeline做进一步处理
作用:
清洗数据
检查抓取的数据是否有效
去重
保存数据
#pipeline实现的方法
process_item(self, item, spider):数据处理工作都在此方法中完成,item是爬取的数据
open_spider(self, spider): 爬虫开启时执行,一般用来做初始化的工作,比如连接数据库
close_spider(self, spoder):当爬虫关闭时执行,可以用来做首尾工作,如关闭数据库连接
from_crawl(cls, crawler):调用此方法会通过初始化crawler对象返回一个pipeline实例。通过crawler对象可以返回scrapy的所有核心组件,如全局配置信息
实现保存问json数据
import json
class ToscrapebookPipeline:
def open_spider(self, spider):
self.file = open('book.json', 'w')
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii = False) + '\n'
self.file.write(line)
return item
下一篇我们介绍如何利用管道来下载文件和图片:scrapy下载文件和图片