多维布隆算法在Redis指纹自动过期中的应用
2020-09-02贾小云杜晓旭
计算机应用与软件 2020年8期
关键词:设置
贾小云 杜晓旭
(陕西科技大学电子信息与人工智能学院 陕西 西安 710021)
0 引 言
如果利用Scrapy-Redis框架进行亿级规模以上的数据爬取,且要满足重复出现的指纹在一段时间内二次遇到不采集、一段时间外二次遇到再采集的话,该框架本身是无法完成的。这不仅是因为框架本身占用空间严重,还因为Redis只能对去重集合设置过期时间,而不能对具体的某一指纹设置。如果对去重集合设置了过期时间,等过期后整个去重队列都会被删除,这显然无法满足我们的需求。因此,解决这些问题成为解决Scrapy-Redis指纹自动过期难题的重点,也是本文研究内容的关键。
1 Scrapy-Redis框架
单机模式的Scrapy框架是目前十分流行的爬虫框架,其融合Redis组件后的Scrapy-Redis框架摆脱了单机的限制,能够快速实现简单分布式爬虫的部署与运行。Scrapy-Redis中有共用的数据库用来存储去重集合与请求队列,并通过对它们的分享帮助分别部署在不同主机上的爬虫程序协调工作。
Scrapy-Redis指纹是指把请求体、请求方式和请求URL通过MD5加密结合在一起,然后再利用32进制转义字符进行转义后生成的字符串。指纹放入Redis数据库中作为请求的唯一标识。
当一个请求在Scrapy中被请求时,它会先在去重器中进行校验,校验过程可以简单概括如下:
Step1针对发起的请求,生成一个请求指纹。
Step2对该指纹是否已在指纹集合中进行判断。
Step3如果已经存在,则舍弃它;如果不存在,则在指纹集合中添加该指纹并在请求队列中添加该请求。
Scrapy-Redis为了实现爬虫的分布式部署,通过连接Redis数据库重写了Scrapy的去重器。……
登录APP查看全文
