scrapy中Pipeline的使用

it2024-07-20  39

scrapy中Pipeline的使用

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
最新回复(0)