剪掉失败的代理

2024-04-26 17:47:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用this script在scrapy中随机分配代理。问题是,一旦它为请求分配了一个代理,它就不会再分配另一个了,因为这段代码:

 def process_request(self, request, spider):
        # Don't overwrite with a random one (server-side state for IP)
        if 'proxy' in request.meta:
            return

这意味着如果有一个坏的代理没有连接到任何东西,那么请求将失败。我打算把它改成这样:

^{pr2}$

因此,如果当前代理失败5次,它就可以分配一个新的代理。我假设如果我在settings.py中将RETRY_TIMES设置为20,那么请求不会失败,直到4个不同的代理分别进行了5次尝试。在

我想知道这会不会造成什么问题。据我所知,检查之所以存在首先是为了有状态的事务,例如那些依赖于登录或cookies的事务。对吗?在


Tags: 代码self代理requestdefwithscriptrandom
2条回答

是的,我认为这个脚本的想法是检查用户是否已经在meta参数上定义了一个代理,这样它就可以从spider控制它。在

将其设置为每5次更改一次代理是可以的,但我认为您必须重新登录到页面,因为大多数页面都知道您何时从发出请求(代理)的位置更改。在

旋转代理的想法并不像随机选择一个代理那么简单,因为你最终还是可以使用同一个代理,而且还可以定义一个站点何时被“禁止”的规则,而不仅仅是检查状态。这是我知道的你想要的服务:Crawlera和{a2}。在

如果您希望scray上的直接功能用于旋转代理,我建议使用Crawlera,因为它已经完全集成。在

我也遇到了同样的问题。 我improved这个aivarsk/scrapy-proxies。我的中间件继承了基本的RetryMiddleware,并尝试使用一个代理重试次数。如果代理不可用,中间件会更改它。在

相关问题 更多 >