2016-08-02 73 views
0

我写了一个使用请求模块的网络抓取工具。我打开一个会话并使用此会话发送后续请求。它有两个阶段。Python会话10054连接中止错误

1)逐页逐页收集数组中的id。 2)使用对同一主机上的ajax服务器的请求,获取阵列中每个id的详细信息。

刮刀在我的Linux机器上正常工作。然而,当我在Windows 10上运行bot时,阶段1完成得很好,但是在阶段2中的一些请求之后,python抛出这个异常

文件“c:\ python27 \ lib \ site-packages \ requests \ adapters。 py“,第453行,发送 raise ConnectionError(err,request = request) 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

我仍然不知道为什么这个问题只发生在Windows中。但是,重试装饰器似乎已经解决了套接字错误的问题。脚本挂起的原因是由于服务器没有响应请求。默认情况下,请求模式会一直等待响应。通过添加超时值请求会引发超时异常,并重试装饰器捕获它并再次尝试。我知道这是一个解决方案,而不是一个解决方案,但这是我现在最好的。