在 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