Scrapy - 停止请求但处理响应

时间:2016-02-18 18:12:15

标签: python scrapy

我有一个Scrapy项目,有很多蜘蛛。有一个服务器端解决方案可以重新启动HMA VPN以便更改接口IP(这样我们就可以获得不同的IP并且不会被阻止)。

有一个自定义下载中间件,它为每个请求和响应发送相应的套接字消息,以便服务器端解决方案可以触发VPN重启。显然,当VPN重启即将发生时,Scrapy不得产生任何新请求 - 我们通过拥有一个锁文件来控制它。但是,在实际发生VPN重启之前,Scrapy必须处理所有尚未收到的响应。

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

1 个答案:

答案 0 :(得分:0)

原来解决方案非常简单:

if os.path.exists(LOCK_FILE_PATH):
    return request

这样做请求将通过中间件全部传递,直到可以执行。