Pipeline模块的作用:
清理HTML数据验证抓取的数据(检查项目是否包含某些字段)检查重复项(并将其删除)将刮擦的物品存储在数据库中过滤与存储实例:
将数据修改过滤,之后保存至本地
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html class XiaohuaPipeline(object): # 爬虫开始执行一次 def open_spider(self, spider): self.fp = open('joke.txt', mode='w', encoding='utf-8') # 爬虫关闭时执行一次 def close_spider(self, spider): self.fp.close() # 交给优先级低的继续执行 def process_item(self, item, spider): item['time'] = u'4月'+item['time'] self.fp.write('%s, %s, %s\n' % (item['title'], item['href'], item['time'])) if item['time']=='4月25日': #返回的结果给下一级,如果没有那么就会报错 return item根据模块里的提示:请不要忘记配置setting
(数值0~1000,越小优先级越高)
setting里的ITEM_PIPELINES解释:里面是以字典的形式进行存放
xiaohua:代表爬虫项目名
pipelines:代表模块名
xiaohuaPipeline:代表类名
里面的 点 :代表下一级的意思
去重实例:
from scrapy.exceptions import DropItem class DuplicatesPipeline(object): #初始化数据,定义一个空集合,这里需注意集合的特性,无序不重复 def __init__(self): self.ids_seen = set() def process_item(self, item, spider): #判断这个数据是否已经在集合里了,如果在抛出自定义异常,如果不在添加此数据,并返回数据给下一级 if item['time'] in self.ids_seen: raise DropItem('Duplicate item found: %s'% item) else: self.ids_seen.add(item['time']) return item