url去重

常见URL过滤方法

1 直接查询比较

假设要存储url A,在入库前首先查询url库中是否存在 A,如果存在,则不入库,否则入库。
这种方法准确性高,但是一旦数据量变大,占用的存储空间也变大,同时,由于要查库,数据一多,查询时间变长,存储效率下降。

2 基于hashlib(MD5,SHA1摘要算法)的存储

对于给定的url,通过hash函数生成对应的hash值,并将该值存入库中。当在检查url是否存在库中时,只要将要检查的url,通过hash函数获取其hash值,然后查看库中是否存在该hash值,存在则丢弃,否则入库。

这种方法在数据量变大时,占用的存储空间也会增大,查询时间也会加长。
但是它可以将url进行压缩。对于很长的url,hash值可以相对很短。

以上方法中,为加快查询速度,一般可以选择 Redis作为查询库。

3 scrapy / scrapy-redis

1.使用scrapy自带的set集合去重,当程序结束set集合会被清空,再次运行会导致数据重复

3.使用scrapy_redis的去重策略,会将已经爬取的url地址经过编码后存入redis,并且会做数据持久化,当爬虫再次启动时,会重新加载本地的数据,对爬虫的url做去重

4 布隆过滤器 Bloom Filter

布隆在1970年提出了布隆过滤器(Bloom Filter),是一个很长的二进制向量和一系列随机映射函数(hash function)。

布隆过滤器可以用于检索一个元素是否在一个集合中。

(大数据处理)使用布隆去重,会采用多重哈希,将url地址映射到位阵列中的某个点上,空间和时间利用率更高(推荐)

优点:占用空间小,查询快
缺点:有误判,删除困难

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章