urlopen error [errno 10060]的解决思路

Posted 周二也被占用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了urlopen error [errno 10060]的解决思路相关的知识,希望对你有一定的参考价值。

当用多线程爬取某个网站的数据的时候,爬取一段时间后,总出现urlopen error [errno 10060]的错误,结果线程无端的被挂掉,一开始的解决思路是每次连接的时候换用不同的useragent,结果还是出现这种问题,在网上查了下,看到网上别人的经验,原来是 如果用多个线程爬去某个网站的数据,每次连接完的时候,需要sleep(1)一会,不然该网站服务端的防火墙会ban掉你的connect。so 按照这种解决方法,果然不再出现urlopen error [errno 10060]的异常了。

睡眠等待机制会减少urlopen error [errno 10060]出现的概率,但访问次数多了还是会出现

于是看了网上说法是连接时网络不稳定造成的,于是写了个多次尝试连接的函数

[python]  view plain  copy
  1. def getUrl_multiTry(url):  
  2.     user_agent ='"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/38.0.2125.122 Safari/537.36"'  
  3.     headers =  'User-Agent' : user_agent   
  4.     maxTryNum=10  
  5.     for tries in range(maxTryNum):  
  6.         try:  
  7.             req = urllib2.Request(url, headers = headers)   
  8.             html=urllib2.urlopen(req).read()  
  9.             break  
  10.         except:  
  11.             if tries <(maxTryNum-1):  
  12.                 continue  
  13.             else:  
  14.                 logging.error("Has tried %d times to access url %s, all failed!",maxTryNum,url)  
  15.                 break  
  16.               
  17.                   
  18.     return html  

经测验,可以搞定 urlopen error [errno 10060]

以上是关于urlopen error [errno 10060]的解决思路的主要内容,如果未能解决你的问题,请参考以下文章

python socket 超时设置 errno10054

python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

mysql_errno的使用范例

urllib2.URLError: <urlopen 错误 [Errno 8]

无法使用 python 连接到 *.onion 站点(<urlopen 错误 [Errno 11001] getaddrinfo failed>)

urllib2.URLError: <urlopen 错误 [Errno 32] Broken pipe - Google Leads