URL去重广泛应用于网络爬虫方面,主要体现在以下两点:
点评:使用关系型数据库查询URL是否存在,进而实现URL去重,这种方式效率低,速度慢,数据量越大查询越慢,不推荐!
又可以分为两种方法:使用Python set结构直接存储URL去重,或者存储URL对应的MD5来去重;
两种方法是基于内存去重,但第二种方法优势在于降低了内存的消耗。
假设存储1亿个不同的URL,每个URL平均长度为80个字符:
关于内存消重,能够实现数据快速去重,但受制内存大小的限制,这就决定了去重数据量规模,如果是十亿级,百亿级URL消重,就无法应付了;同时内存去重还有一个问题就是数据持久化问题:主机意外故障,内存数据将不复存在。
也是基于内存去重,Redis数据库有集合数据类型,可以直接存储URL去重,或者存储URL对应的MD5来去重;
优势在于:便于分布式爬虫共用同一份消重数据,保证了数据一致性,而且支持数据持久化;
缺点在于:同样,受制于内存大小限制,如果是十亿级,百亿级URL消重,就无法应付了;
布隆过滤器是一种去重算法,这种去重方法占用内存极低,基本上可以忽略内存大小对去重数据量的限制;但是有一个问题,存在低概率的误报。
综合以上URL去重方法,URL最终的去重方案为:
最后根据业务场景需求,选择合适的去重方式!
以上两点核心问题在于如何实现快速去重方法。
有关布隆过滤器介绍,及Python版实现,会在后续文章重点介绍,敬请期待!