Python进阶之爬虫url去重(可用于文件去重)

主要介绍几个常用和目前了解的,当然还有其他方法,这里只说目前本人自己能实现的几种方法的基本思想:

基于Hash算法的存储。

对每一个给定的URL,都是用一个已经建立好的Hash函数,映射到某个物理地址上。当需要进行检测URL是否重复的时候,只需要将这个URL进行Hash映射,如果得到的地址已经存在,说明已经被下载过,放弃下载,否则,将该URL及其Hash地址作为键值对存放到Hash表中。

这样,URL去重存储库就是要维护一个Hash表,如果Hash函数设计的不好,在进行映射的时候,发生碰撞的几率很大,则再进行碰撞的处理也非常复杂。而且,这里使用的是URL作为键,URL字符串也占用了很大的存储空间。

基于MD5压缩映射的存储。

MD5算法是一种加密算法,同时它也是基于Hash的算法。这样就可以对URL字符串进行压缩,得到一个压缩字符串,同时可以直接得到一个Hash地址。另外,MD5算法能够将任何字符串压缩为128位整数,并映射为物理地址,而且MD5进行Hash映射碰撞的几率非常小,这点非常好。从另一个方面来说,非常少的碰撞,对于搜索引擎的爬虫是可以容忍的。况且,在爬虫进行检测的过程中,可以通过记录日志来保存在进行MD5时发生碰撞的URL,通过单独对该URL进行处理也是可行的。

基于布隆过滤器(Bloom Filter)的存储。

布隆过滤器的基本算法思想主要是利用一个长度为M的位数组,且初始化为零,一个元素通过K(K<<M)个哈希函数进行随机装配,并将该位置1,当再有数据字符串进来要存储的时候,比对该位置是否为1,如果是1就舍弃,如果是0则继续 存储。以此来达到去重的效果。



猜你喜欢

转载自blog.csdn.net/m0_37338590/article/details/80314643