爬虫中的去重处理方法详解

  • 去重实现的基本原理

    • 根据给定的判断依据和给定的去重容器,将原始数据逐一进行判断,判断去重容器中是否有该数据。如果没有那就把该数据对应的判断依据添加去重容器中,同时标记该数据是不重复数据;如果有就不添加,同时标记该数据是重复数据。

      • 判断依据(原始数据、原始数据特征值)

      • 去重容器(存储判断数据) set()

根据原始数据进行去重判断

爬虫中的去重处理方法详解

根据原始数据的特征值进行去重判断

爬虫中的去重处理方法详解

临时去重容器与持久化去重容器
  • 临时去重容器指如利用list、set等编程语言的数据结构存储去重数据,一旦程序关闭或重启后,去重容器中的数据就被回收了。
    • 使用与实现简单方便;但无法共享、无法持久化
  • 持久化去重容器指如利用redis、mysql等数据库存储去重数据。
    • 持久化、共享;但使用与实现相对复杂

爬虫中的去重处理方法详解

1 .基于信息摘要算法的去重

  • 信息摘要hash算法指可以将任意长度的文本、字节数据,通过一个算法得到一个固定长度的文本。 如MD5(128位)、SHA1(160位)等。

    • 特征:只要源文本不同,计算得到的结果,必然不同(摘要)。

    • 摘要:摘要算法主要用于比对信息源是否一致,因为只要源发生变化,得到的摘要必然不同;而且通常结果要比源短很多,所以称为“摘要”。

  • 正因此,利用信息摘要算法能大大降低去重容器的存储空间使用率,并提高判断速度,且由于其强唯一性的特征,几乎不存在误判。

  • 注意:

    • hash算法得出的结果其实本质上就是一串数值,如md5的128位指的是二进制的长度,十六进制的长度是32位。一个十六进制等于四个二进制。

2.基于simhash算法的去重(千万级数据)

Simhash算法是一种局部敏感哈希算法,能实现相似文本内容的去重。比如下列两篇新闻数据

爬虫中的去重处理方法详解

  • 与信息摘要算法的区别:

    • 信息摘要算法:如果原始内容只相差一个字节,所产生的签名也很可能差别很大。 ==
    • Simhash算法:如果原始内容只相差一个字节,所产生的签名差别非常小。
  • Simhash值比对:通过两者的simhash值的二进制位的差异来表示原始文本内容的差异。差异个数又被称为海明距离。

  • 注意:

    • Simhash对长文本500字+比较适用,短文本可能偏差较大

    • 在google的论文给出的数据中,64位simhash值,在海明距离为3的情况下,可认为两篇文档是相似的或者是重复的。当然这个值只是参考值,针对自己的应用可能有不同的测试取值

Simhash值得比对
  • Python实现的simhash算法。该模块得出的simhash值长度正是64位 如对
  • 比前面列出的人民网和中国网的两篇相似新闻(以下值仅供参考)
  • 128位MD5值:

爬虫中的去重处理方法详解

64位simhash值
爬虫中的去重处理方法详解

3.布隆过滤器原理与实现(亿级数据)

爬虫中的去重处理方法详解
爬虫中的去重处理方法详解