在 scrapy 中使用 ip 代理需要借助中间件的功能
首先在settings 中设置好中间件,中间件优先级数字越小越先被执行
'DOWNLOADER_MIDDLEWARES':{ 'spider.spider.middlewares.ProxyMiddleWare':542, 'spider.spider.middlewares.SelenuimDownloaderMiddleware':543 }
然后编写中间件,拦截请求设置代理
class ProxyMiddleWare(object): def process_request(self, request, spider): """ 对 request 加上proxy""" proxy = RedisClient().pop_proxy().decode('utf-8') print('---------this is request ip ----------:'+ proxy) request.meta['proxy'] = proxy def process_response(self, request, response, spider): """ 对返回的 response 处理""" # 如果返回的 response 状态不是 200, 重新生成当前的 request对象 if response.status != 200: proxy = RedisClient().pop_proxy().decode('utf-8') print('this is response ip:'+ proxy) # 对当前 request 加上代理 return request return response