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