爬虫去重策略

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41000891/article/details/85251381

我们都知道在获取网站的各层url的过程中,每一层都会有相互指向的url,这样就形成了一个闭合的url网络,那么要想实现爬虫一步步获取url,不陷入死循环,必须进行去重的操作

1.将访问过的url保存到数据库中

       这种方式是最简单方式,当我们在获取下一个url的时候,就到数据库中查询这个url是否存在,虽然数据库有缓存,但是每个url都从数据库中查找,这样以来效率会非常的低,但是这种方式操作起来比较简单。

2.将访问过的url保存到set中,主需要o(1)的代价就可以查询url

      第二种方式就是将url保存到内存当中,在取url的过程中就可以很快拿到。这种方法的缺点就是,随着不断查询,内存占率空间就会逐步加大,假设一个大型网站有1亿条url,每条url有50个字符,python中按照unicode编码,假设有2个byte。那么按照下面的公式就能计算出,所需要的内存空间为9G。

      100000000*2byte*50个字符/1024/1024/1024 = 9G

3. url经过md5等方法哈希后保存到set中

      使用md5编码就可以将字符缩减到固定的长度,用于解决第二种方法中内存占用过度的问题

4.用bitmap方法,将访问过的url通过hash函数映射到某一位

      如果还想将内存占用进一步压缩,就可以使用这种方法。它可以申请8个位,以0,1映射到位置当中,以0,1及位置,表明url是否存在。但是这种方法的冲突非常高。

5.bloomfilter方法对 bitmap进行改进,多重hash函数降低冲突

     这种方法改进了bitmap方法,通过多个方法改进了重复的可能性。

展开阅读全文

没有更多推荐了,返回首页