爬虫去重策略
爬虫为何要进行去重:
- 如果不去重容易陷入爬取死循环
- 浪费资源、重复爬取效率低下
以100000000条数据为例子、对比各个去重方式的效率。
1.将访问过的URL保存到数据库
特点:应用简单、效率非常低下
使用方法:
- 将URL存储至数据库中
- 获取新URL时,查询数据库检查是否与既有URL重复
效率:效率十分低下,并使用很少。不进行计算
2.将访问过的URL保存到set中
特点:速度较快、内存占用会越来越大
效率:100000000×2byte×50个字符/1024/1024/1024 = 9G
3.URL经过md5等方法哈希后保存到set中
特点:md5能将任意长度字符串压缩成固定长度md5字符串,并且不会重复。
效率:能够成倍的压缩字符串,大约只需要两三G的内存
4.用bitmap方法,将访问过的URL通过hash函数映射到某一位
特点:十分节省内存,容易出现映射冲突
使用方法:
一个Byte有八个位,将访问过的URL通过hash函数映射到某一位,但是容易将两个URL映射到同一个位上。
效率:对内存压缩十分显著,100000000/8/1024/1024/1024 = 11.920 大约十二M的内存占用。
5.bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
特点:通过多个hash函数减少冲突可能性