Scrapy使用Pipeline过滤重复数据

  1. 在pipelines.py中自定义DuplicatesPipeline类:
class DuplicatesPipeline(object):
    """
    去重
    """

    def __init__(self):
        self.book_set = set()

    def process_item(self, item, spider):
        name = item['name']
        if name in self.book_set:
            raise DropItem("Duplicate book found:%s" % item)

        self.book_set.add(name)
        return item
  • 增加构造器方法,初始化用于去重的集合。
  • 在process_item方法中,先取出item的name字段,检查书名是否已存在集合book_set中,如果存在,抛出DropItem异常,将item抛弃;否则,将item的name字段存入集合,返回item。
    然后在配置文件settings.py中启用DuplicatesPipeline:
ITEM_PIPELINES = {
    'example.pipelines.DuplicatesPipeline': 350,
}

即可实现去重。

    原文作者:MR_ChanHwang
    原文地址: https://www.jianshu.com/p/7c1d20983540
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞