去重器把未爬取成功的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回答
-
你这个问题提的很好,其实解决这个问题我不建议这样解决,因为这样算是改动了源码。其实有更好的解决办法。课程中讲解过如何捕获非200的状态请求,可以使用中间件捕获这些异常状态码的reponse,然后重新yield这个url的request并在参数中设置 dont_filter设置为True就行了
00
相似问题