當我們用 request 發起網路請求,時不時會遇到超時,當然不可能讓這個請求一直阻塞,一般會設定一個超時時間,用 try except
丟擲異常,避免程式中斷。可如果一次超時就放棄該請求,誤殺的概率會很大,我們日常訪問某網站時,有打不開的情況都會多重新整理幾次。因此,我們也需要讓 python 進行重試。而 retrying 模組應運而生
retrying 的安裝很簡單,用 pip 一鍵安裝:
pip install retrying
為了表現 retrying 的重試功能,我們故意請求一個不規範的連結,如 www.baidu.com
,由於沒有帶 http 協議,request 會報錯,從而觸發 retrying 重試
程式碼如下:
import requests
from retrying import retry
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
}
@retry(stop_max_attempt_number=3) # 表示重試以下程式碼三次
def _parse_url(url):
print("-" * 30)
response = requests.get(url, headers=headers, timeout=3)
assert response.status_code == 200
return response.content.decode()
def parse_url(url):
try:
html_str = _parse_url(url)
except:
html_str = None
return html_str
if __name__ == "__main__":
url = 'www.baidu.com'
print(parse_url(url))
結果如下:
------------------------------
------------------------------
------------------------------
None
說明,retry
在遇到異常後會重試執行,直到給定的最大重試次數