<返回更多

Python网络爬虫之URL去重方法:本地内存,Redis,布隆过滤器

2019-08-26    
加入收藏

URL去重应用

URL去重广泛应用于网络爬虫方面,主要体现在以下两点:

  1. 实现增量爬虫时,需要判断哪些网页已经爬取了,哪些网页是新产生的,对新产生的网页,增量爬虫需要抓取其内容;
  2. 避免爬虫出现“死循环”,由于网络间链接非常复杂,爬虫在爬取数据时,容易出现闭环的死循环现象,重复做无用功,无法爬取新的内容,为了避免出现死循环,需要让爬虫知道哪些URL已经爬取了,已爬取的URL不再访问。

几种URL去重方法介绍

点评:使用关系型数据库查询URL是否存在,进而实现URL去重,这种方式效率低,速度慢,数据量越大查询越慢,不推荐

又可以分为两种方法:使用Python set结构直接存储URL去重,或者存储URL对应的MD5来去重;

两种方法是基于内存去重,但第二种方法优势在于降低了内存的消耗

假设存储1亿个不同的URL,每个URL平均长度为80个字符:

  1. 通过Python set结构存储URL,消耗的内存大小为7.45GB
  2. 通过Python set结构存储URL对应的MD5,消耗的内存大小为2.98GB

关于内存消重,能够实现数据快速去重,但受制内存大小的限制,这就决定了去重数据量规模,如果是十亿级,百亿级URL消重,就无法应付了;同时内存去重还有一个问题就是数据持久化问题:主机意外故障,内存数据将不复存在。

也是基于内存去重,Redis数据库有集合数据类型,可以直接存储URL去重,或者存储URL对应的MD5来去重;

优势在于:便于分布式爬虫共用同一份消重数据,保证了数据一致性,而且支持数据持久化;

缺点在于:同样,受制于内存大小限制,如果是十亿级,百亿级URL消重,就无法应付了;

布隆过滤器是一种去重算法,这种去重方法占用内存极低,基本上可以忽略内存大小对去重数据量的限制;但是有一个问题,存在低概率的误报。

最终URL去重方案

综合以上URL去重方法,URL最终的去重方案为:

最后根据业务场景需求,选择合适的去重方式!

以上两点核心问题在于如何实现快速去重方法。

最后

有关布隆过滤器介绍,及Python版实现,会在后续文章重点介绍,敬请期待!

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>