我和很多蜘蛛有一个很糟糕的计划。有一个服务器端的解决方案可以重启HMA VPN以更改接口IP(这样我们就可以得到不同的IP,并且不会被阻塞)。在
有一个定制的下载中间件,它为每个请求和响应发送相应的套接字消息,以便服务器端解决方案能够触发VPN重启。显然,当VPN即将重启时,Scrapy不能产生任何新的请求——我们通过拥有一个锁文件来控制它。然而,Scrapy必须在VPN重新启动之前处理所有尚未收到的响应。在
将sleep
放在下载中间件中可以完全停止Scrapy。有没有一种方法可以处理响应,但推迟新的请求(直到锁文件被删除)?在
显然,当产生超过1x个并发请求时,就是这种情况。在
使用以下中间件代码:
class CustomMiddleware(object):
def process_request(self, request, spider):
while os.path.exists(LOCK_FILE_PATH):
time.sleep(10)
# Send corresponding socket message("OPEN")
def process_response(self, request, response, spider):
# Send corresponding socket message("CLOSE")
return response
解决方案非常简单:
这样做的请求会在整个中间件中传递,直到可以执行为止。在
相关问题 更多 >
编程相关推荐