Scrapy dont_proxy元键

时间:2018-01-10 01:40:41

标签: python-3.x proxy scrapy

我正在使用Scrapy和Crawlera,但由于某些原因,我想关闭Crawlera以获取某些请求并切换为其他人。我发现dont_proxy元关键似乎是为了这样的目的而创建的,但是当我使用它时,我从Crawlera得到407响应(据我所知)意味着代理授权错误,所以解决方案显然不够。在旅途中打开和关闭Crawlera的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

该问题是由meta中的“proxy”字段引起的。当你向你的元添加“dont_proxy”时,crawlera不再处理它,但“代理”字段仍然在元中,导致407响应。所以我在这里发布我的解决方案给每个遇到同样问题的人:

class ShutdownCrawleraMiddleware(object):
    proxy = 'http://proxy.crawlera.com:8010'
    def process_request(self, request, spider):
        if hasattr(request, 'meta'):
            if request.meta.get('dont_proxy') is True:
                if request.meta.get('proxy'):
                    request.meta.pop('proxy')
            else:
                if not request.meta.get('proxy'):
                    request.meta['proxy'] = self.proxy

此中间件优先级应高于CrawleraMiddleware的优先级。