爬虫去重策略

我们都知道在获取网站的各层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方法,通过多个方法改进了重复的可能性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值