scrapy中Pipeline的使用

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

微信截图_20200416201147.png

(数值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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值