我使用请求模块编写了一个web scraper。我打开会话并使用此会话发送后续请求。它有两个阶段。
1)逐页抓取并收集数组中的id。 2)使用对同一主机上的ajax服务器的请求,获取有关阵列中每个id的详细信息。
刮刀在我的Linux机器上正常工作。然而,当我在Windows 10上运行机器人时,第1阶段已经完成,但是在第2阶段的几个请求之后,python抛出了这个异常
文件“c:\ python27 \ lib \ site-packages \ requests \ adapters.py”,第453行,发送 引发ConnectionError(错误,请求=请求) ConnectionError :('Connection aborted。',error(10054,'Varolan bir ba \ xf0lant \ xfd uzaktaki bir ana bilgisayar taraf \ xfdndan zorla kapat \ xfdld'))
导致此问题的两个操作系统有什么不同?我怎样才能克服这个问题?
使用重试模块修改了我的请求代码,没有任何积极影响。现在脚本不会抛出异常,只是挂起什么都不做。
@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=7)
def doReq(self, url):
time.sleep(0.5)
response = self.session.get(url, headers=self.headers)
return response
答案 0 :(得分:0)
我仍然不知道为什么只在Windows中出现此问题。但是,重试装饰器似乎已经修复了套接字错误的问题。脚本挂起的原因是服务器没有响应请求。默认情况下,请求模式会永远等待响应。通过添加超时值,请求会抛出超时异常并重试装饰器捕获它并再次尝试。我知道这是一个解决方案,而不是一个解决方案,但这是我现在最好的。