前言

本章内容是如何对爬取的数据进行去重,当你爬取了很多内容之后,这个去重复就尤为重要。

去重方法

  • 对URL进行去重(判断URL是否重复)

  • 对数据进行去重(判断是否是重复数据)

代码实现

  • URL去重

    1
    2
    #dont_filter=False 就是url是否处理的意思,有一个自带的过滤器
    yield scrapy.Request(url, self.parse, dont_filter=False)
  • 数据去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    from scrapy.exceptions import DropItem 

    class DuplicatesPipeline(object):
    def __init__(self):
    #set为集合,集合为数据不重复无排序的
    self.data_set = set()

    def process_item(self, item, spider):
    data = item['data']
    #如果数据已经存在,抛出DropItem异常,丢弃item数据,不会再传给后面继续处理
    if data in self.data_set:
    raise DropItem("Duplicate item found: %s" % item)
    #不存在时,就添加数据
    self.data_set.add(item['data'])
    return item