在公司项目中,有一些爬虫中需要用的国内代理,有一些需要用到国外代理,有一些不用代理


我测试了三个方案


方案一:

在settings.py中开启代理,然后在spider中重写DOWNLOADER_MIDDLEWARES,但重写无法生效


方案二:

让scrapy切换到不同的settings.py文件,这个手动切换是有效果的,但是我研究了半天不知道如果让程序自动切换,最后放弃


方案三:

在middlewares.py中直接写,通过request.url来判断并启用相应的代理

class ProxyMiddleware(object):
        def process_request(self, request, spider):
            url=request.url
            if 'baidu.com' in url:
                request.meta['proxy'] = '这里设置国内http代理'
            elif 'facebook.com' in url:
                request.meta['proxy']='这里设置国外http代理'
            else:
                pass

最后是采用的这个方案