Python @retry裝飾器的使用與實現案例(requests請求失敗並重復請求)


在爬蟲代碼的編寫中,requests請求網頁的時候常常請求失敗或錯誤,一般的操作是各種判斷狀態和超時,需要多次重試請求,這種情況下,如果想優雅的實現功能,可以學習下retrying包下的retry裝飾器的使用

安裝:pip install retrying

 

在@retry()裝飾器中,比較重要的幾個參數如下:

stop_max_attempt_number:在停止之前嘗試的最大次數,最后一次如果還是有異常則會拋出異常,停止運行,默認為5次

wait_random_min:在兩次調用方法停留時長,停留最短時間,默認為0,單位毫秒

wait_random_max:在兩次調用方法停留時長,停留最長時間,默認為1000毫

retry_on_result:指定一個函數,如果指定的函數返回True,則重試,否則拋出異常退出

retry_on_exception: 指定一個函數,如果此函數返回指定異常,則會重試,如果不是指定的異常則會退出

這里只摘錄幾個常用的方法,想了解其他的方法,請自行查閱 

直接上例子:
# encoding:utf-8
import traceback
from retrying import retry
import requests
from user_agent import agert as ag
import random 
def _result(result):
return result is None


def header(header):
try:
if header != None:
header['User-Agent'] = random.choice(ag)
else:
header = {'User-Agent': random.choice(ag)}
return header
except Exception as e:
traceback.print_exc(e) 
@retry(stop_max_attempt_number=5, wait_random_min=1000, wait_random_max=2000, retry_on_result=_result)
def My_Request_Get(url, headers=None):
headers = header(headers)
# with open('./proxy_txt', 'r') as f:
# proxy = f.readline()
# proxy = json.loads(proxy)
# print proxy, type(proxy), '/*-'*10
response = requests.get(url, headers=headers, timeout=6)
if response.status_code != 200:
raise requests.RequestException('my_request_get error!!!!')
return response

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM