當用多線程爬取某個網站的數據的時候,爬取一段時間后,總出現urlopen error [errno 10060]的錯誤,結果線程無端的被掛掉,一開始的解決思路是每次連接的時候換用不同的useragent,結果還是出現這種問題,在網上查了下,看到網上別人的經驗,原來是 如果用多個線程爬去某個網站的數據,每次連接完的時候,需要sleep(1)一會,不然該網站服務端的防火牆會ban掉你的connect。so 按照這種解決方法,果然不再出現urlopen error [errno 10060]的異常了。
睡眠等待機制會減少urlopen error [errno 10060]出現的概率,但訪問次數多了還是會出現
於是看了網上說法是連接時網絡不穩定造成的,於是寫了個多次嘗試連接的函數
- def getUrl_multiTry(url):
- user_agent ='"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36"'
- headers = { 'User-Agent' : user_agent }
- maxTryNum=10
- for tries in range(maxTryNum):
- try:
- req = urllib2.Request(url, headers = headers)
- html=urllib2.urlopen(req).read()
- break
- except:
- if tries <(maxTryNum-1):
- continue
- else:
- logging.error("Has tried %d times to access url %s, all failed!",maxTryNum,url)
- break
- return html
經測驗,可以搞定urlopen error [errno 10060]