84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
謝天謝地我剛剛找到了解決方案
用python爬蟲抓站的一些技巧總結 - Python - 伯樂在線http://python.jobbole.com/81997/ 原文在這裡
def request(url, cookie='xxx', retries=5): ret = urlparse.urlparse(url) # Parse input URL if ret.scheme == 'http': conn = httplib.HTTPConnection(ret.netloc) elif ret.scheme == 'https': conn = httplib.HTTPSConnection(ret.netloc) url = ret.path if ret.query: url += '?' + ret.query if ret.fragment: url += '#' + ret.fragment if not url: url = '/' try: conn.request(method='GET', url=url, headers={'Cookie': cookie}) res = conn.getresponse() except Exception, e: print e.message if retries > 0: return request(url=url, retries= retries - 1) else: print 'GET Failed' return '' else: pass finally: pass if res.status != 200: return None return res.read()
原理是用一個retries變數儲存重試次數,然後每次異常處理的時候就遞歸本身並且將重試次數-1,判斷如果重試次數小於0就直接return並且打出失敗日誌
遞歸呼叫自身進行retrycount來限制是一種最直接的方法。 但是有個問題: 如果對方地址只是暫時失敗,例如重啟服務了。立刻重試還是失敗,重試5次的時間很短,當對方服務好了之後這個請求就已經過掉了,因為重試了5次
我用的機制是 重試五次,分別等待30s 1分鐘 10分鐘 30分鐘 1個小時 如果還是失敗就認為確實失敗了。 當然 這個用法是根據具體業務邏輯來做處理。不同的業務需求,對請求的要求也是不一樣的。
謝天謝地我剛剛找到了解決方案
用python爬蟲抓站的一些技巧總結 - Python - 伯樂在線http://python.jobbole.com/81997/ 原文在這裡
原理是用一個retries變數儲存重試次數,然後每次異常處理的時候就遞歸本身並且將重試次數-1,判斷如果重試次數小於0就直接return並且打出失敗日誌
遞歸呼叫自身進行retrycount來限制是一種最直接的方法。
但是有個問題:
如果對方地址只是暫時失敗,例如重啟服務了。立刻重試還是失敗,重試5次的時間很短,當對方服務好了之後這個請求就已經過掉了,因為重試了5次
我用的機制是 重試五次,分別等待30s 1分鐘 10分鐘 30分鐘 1個小時 如果還是失敗就認為確實失敗了。
當然 這個用法是根據具體業務邏輯來做處理。不同的業務需求,對請求的要求也是不一樣的。