爬虫去重策略

1)mysql

使用scrapy自带的set集合去重,当程序结束的时候会被清空,缺点:再次运行会致使数据重复。redis

 

2)sql

使用mysql作去重,对url地址进行md5,base64加密,加密以后会获得一串字符,判断字符串数据结构

是否在mysql表中,若是在表示已经爬取过了,若是不在,表示没有爬取,执行请求,将加密后的urlscrapy

地址存入表中。缺点: 可是这个方法对mysql压力过大,致使崩溃,不推荐函数

 

3)编码

使用scrapy_redis的去重策略,会将已经爬取的url地址通过编码后存入redis,而且会作数据持久化,当爬虫再次启动时,会从新加载本地的数据,对爬虫的url作去重。缺点:若是数据量较大的时候,会占用较多的内存空间加密

4)url

使用布隆去重,采用多重哈希,将url地址映射到位阵列中的某个点上,空间和时间利用率更高(推荐).net


若是想判断一个元素是否是在一个集合里,通常想到的是将全部元素保存起来,而后经过比较肯定。链表,树等等数据结构都是这种思路. 可是随着集合中元素的增长,咱们须要的存储空间愈来愈大,检索速度也愈来愈慢。不过世界上还有一种叫做散列表(又叫哈希表,Hash table)的数据结构。它能够经过一个Hash函数将一个元素映射成一个位阵列(Bit Array)中的一个点。这样一来,咱们只要看看这个点是否是 1 就知道能够集合中有没有它了。这就是布隆过滤器的基本思想。
Hash面临的问题就是冲突。假设 Hash 函数是良好的,若是咱们的位阵列长度为 m 个点,那么若是咱们想将冲突率下降到例如 1%, 这个散列表就只能容纳 m/100 个元素。显然这就不叫空间有效了(Space-efficient)。解决方法也简单,就是使用多个 Hash,若是它们有一个说元素不在集合中,那确定就不在。若是它们都说在,虽然也有必定可能性它们在说谎,不过直觉上判断这种事情的几率是比较低的。

布隆去重的优势和缺点

优势

相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优点。布隆过滤器存储空间和插入/查询时间都是常数。另外, Hash 函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不须要存储元素自己,在某些对保密要求很是严格的场合有优点

缺点

可是布隆过滤器的缺点和优势同样明显。误算率(False Positive)是其中之一。随着存入的元素数量增长,误算率随之增长。可是若是元素数量太少,则使用散列表足矣。--------------------- 做者:一篇蓝天 来源:CSDN 原文:https://blog.csdn.net/qq_41676216/article/details/80830036 版权声明:本文为博主原创文章,转载请附上博文连接!

相关文章
相关标签/搜索