scrapy:切换失败的代理

时间:2015-12-14 13:42:06

标签: python proxy scrapy

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

$("tr:has(.trigger):has(.dialog)").each(function() {
      var row = this
      var dialog = $(".dialog", row).dialog({
        autoOpen: false,
        position: 'center',
        title: 'definizione',
        draggable: true,
        width: 480,
        height: 380,
        resizable: true,
        modal: true,
        show: 'slide'
      });
      $(".trigger", row).click(function() {
        dialog.dialog("open");
      });

})

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

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

从而让它在当前的代理失败5次时分配新的代理。我假设如果我在if request.meta.get('retry_times',0) < 5: return 中将RETRY_TIMES设置为20,那么请求将失败,直到4个不同的代理每次尝试5次为止。

我想知道这是否会导致任何问题。据我了解,首先检查的原因是有状态交易,例如那些依赖登录的交易,或者可能是cookie。那是对的吗?

2 个答案:

答案 0 :(得分:1)

我碰到了同样的问题。 我improved aivarsk/scrapy-proxies。我的中间件由基本的RetryMiddleware继承并尝试使用一个代理RETRY_TIMES。如果代理不可用,则中间件会更改它。

答案 1 :(得分:0)

是的,我认为该脚本的想法是检查用户是否已经在meta参数上定义代理,因此它可以从蜘蛛控制它。

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

旋转代理的想法并不像随机选择一个那么容易,因为你仍然可以最终使用相同的代理,并且还定义了网站何时被禁止的规则&#34;你不像只检查状态那么简单。这就是我所知道的服务:CrawleraProxymesh

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