scrapy.Request的旅行

 

使用代理池跑爬虫时,特别关注每个请求是否使用了代理,所以就有了接下来的收获,也有个问题同大家分享。

 

spider产生请求,例如在for循环中yield,这个生成器会在进入middlewares或下载器之前就被迭代,放入请求队列。

经过middlewares,队列中每个请求均被处理(如设置cookie,添加proxy),然后传递给下载器。但这里有一个需要关注的点,middlewares处理过的请求,下载器不一定立马执行,具体要参考settings中设置的download_delay/per_ip/per_domain。

队列默认的下载顺序是LIFO(后进先出,后进入队列的请求先被下载器执行)。

⚠️若proxy非长效ip,请求在等待执行时,middlewares给其设置的ip可能会失效!

 

建议:

DOWNLOAD_TIMEOUT 设置小值(默认是180),减少无效ip造成的时间浪费。

判断retry_times,更换代理ip或长效ip。

 

问题:

是否可能在每个请求给下载器执行前才设置proxy,减少proxy过期的概率/数量/时间?

 

posted on 2019-02-13 10:29  bigBenn  阅读(111)  评论(0编辑  收藏  举报

导航