Item Pipeline
在创建一个scrapy项目的时候,会自动生成一个pipeliens.py文件,它是用来放置用户自定义的item pipeline,
一个 item pipeline不需要继承特定的基类,只需要实现某些特定的方法,例如process_item、open_spider、close_spider
一个item pipeline必须实现一个process_item(item, spider)方法,该方法用来处理每一项由spider爬取到的数据,这其中有两个参数
item
爬取到的一项数据(item或者字典)
spider
爬取这项数据的spider对象
可以看出process_item方法是item pipeline的核心
1、如果process_item在处理某一项item的时候返回了一项数据,返回的数据就继续传递给下一个item pipeline(如果有就会继续处理)
2、如果process_item在处理某一项item的时候跑出了一个一场,那么这个item就会被抛弃,不会继续传递给后面的item pipeline处理了,通常我们在检测到无效数据的时候或者想要过滤数据的时候会抛出DropItem异常
除了必须实现的process_item方法以外,还有几种常用的方法可以根据需求来选择性的实现
open_spider(self,spider)
Spider打开的时候(处理数据之前)就会回调这个方法,通常这个方法用在开始处理数据之前完成某些初始化的工作,比如连接指定的数据库
close_spider(self, spider)
Spider关闭时(处理完成数据之后)回调这个方法通常这个方法用在处理完成数据之后完成某些清理的操作,比如关闭数据库的连接
from_crawler(cls, crawler)
创建Item pipeline对象的时候回调这个方法。通常在这个方法中通过crawler.settings读取配置,根据配置来创建item pipeline对象
启用Item pipeline
在scrapy中item pipeline是可选择组件,当你想要启动某一个item pipeline的时候需要在settings文件中进行配置
ITEM_PIPELINES是一个字典,我们把想要启动的item pipeline添加到这个字典中,这里面每一个键是item pipeline类的导入的路径,对应的值是一个0-1000之间的数值,同时启动多个item pipeline的时候scrapy会根据这些数值来决定item pipeline处理数据的先后的顺序,数值小的在前面先执行