Scrapy 关于代理IP池的因为版本问题造成的坑


在网上的哥们上抄的获取代理池,但是一直使用都报告失去响应,以为一直是代理不能用,其实是在我们的middlewares的中间件ProxyMiddleWare的问题(我的版本是python3.7,Scrapy1.5.1)贴出改后的代码

class ProxyMiddleWare(object): """docstring for ProxyMiddleWare""" def process_request(self,request, spider): '''对request对象加上proxy''' proxy = self.get_random_proxy() print("this is request ip:"+proxy) request.meta['http_proxy'] = proxy def process_response(self, request, response, spider): '''对返回的response处理''' # 如果返回的response状态不是200,重新生成当前request对象 if response.status != 200: proxy = self.get_random_proxy() print("this is response ip:"+proxy) # 对当前reque加上代理 request.meta['http_proxy'] = proxy return request return response def get_random_proxy(self): '''随机从文件中读取proxy''' path1=os.path.abspath('.') #表示当前所处的文件夹的绝对路径 while 1: with open(path1+'\\crawler\\proxies.txt', 'r') as f: proxies = f.readlines() if proxies: break else: time.sleep(1) proxy = random.choice(proxies).strip() return proxy

重点就在对当前的request加代理这里

request.mata一定是这个样子的

request.meta['http_proxy'] = proxy

原来是request.meta['proxy'] = proxy就会一直有问题,什么主机失去响应啊什么的

本文由【z】发布于开源中国,原文链接:https://my.oschina.net/zhu97/blog/1925812

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM