去重器把未爬取成功的url也过滤掉了

来源:10-9 集成bloomfilter到scrapy-redis中

慕丝146315

2019-10-05

老师,您好,当我们每发起一个请求时,调度器都会先对url进行指纹查重。如果该url未必爬取过,就会把该url的指纹信息放到set集合中,并且把该url放到请求队列中。
图片描述图片描述我的问题是假如我们这个url未爬取成功,返回的响应的状态码不是200-300之间,那么这个网页我们就无法爬取到了,因为它的url指纹信息已经被放到set集合中,那么这样我们是不是可能就会漏掉很多url?
我们是否可以“把url的指纹信息放到set集合中”这一步放到下载中间件的process_response中,如果response的状态码是再200-300之间,就把它放到set中,否则就忽略?

写回答

1回答

bobby

2019-10-08

你这个问题提的很好,其实解决这个问题我不建议这样解决,因为这样算是改动了源码。其实有更好的解决办法。课程中讲解过如何捕获非200的状态请求,可以使用中间件捕获这些异常状态码的reponse,然后重新yield这个url的request并在参数中设置 dont_filter设置为True就行了

0
0

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程