Python爬蟲requests判斷請求超時並重新post/get發送請求

Python爬蟲requests判斷請求超時並重新post/get發送請求
在使用Python爬蟲中,你可以使用requests庫來發送網絡請求。爲了判斷請求超時並重新發送請求,你可以設置一個超時時間,並在請求超時時捕獲異常重新發送請求。

import requests
#Python爬蟲requests判斷請求超時並重新post發送請求,proxies爲代理
def send_request_post(url, data, headers , proxies , max_retries=3, timeout=5):
    retries = 0
    while retries < max_retries:
        try:
            # 去掉警告
            requests.packages.urllib3.disable_warnings()
            response = requests.post(url=url, json=data, headers=headers , verify=False, proxies=proxies,timeout=timeout)
            if response.status_code == 200:
                # 請求成功,返回響應
                return response
        except requests.exceptions.Timeout:
            print(f"POST請求超時,正在進行第 {retries + 1} 次重試...")
        except requests.exceptions.RequestException as e:
            print(f"請求發生異常:{e}")
        retries += 1

    print("請求失敗,達到最大重試次數。")
    return None

#Python爬蟲requests判斷請求超時並重新get發送請求,
def send_request_get(url, max_retries=3, timeout=5):
    retries = 0
    while retries < max_retries:
        try:
            response = requests.get(url, timeout=timeout)
            if response.status_code == 200:
                # 請求成功,返回響應
                return response
        except requests.exceptions.Timeout:
            print(f"GET請求超時,正在進行第 {retries + 1} 次重試...")
        except requests.exceptions.RequestException as e:
            print(f"請求發生異常:{e}")
        retries += 1

    print("請求失敗,達到最大重試次數。")
    return None

 

#示例:get獲取代理ip
def get_ip():
    response = send_request_get('http:/xxxxxxxxxxxxxx/tip')
    if response:
        data = json.loads(response.text)
           proxies = {
         "http": "http://%(proxy)s" % {"proxy": data["ip"]}, 
         "https": "http://%(proxy)s" % {"proxy": data["ip"]}
            }
           return proxies
#示例post
send_request_post(url, data, headers, proxies)

在上面的示例中,send_request_get函數接受一個URL作爲參數,並可選地指定最大重試次數和超時時間。函數使用requests.get發送GET請求,並設置了超時時間爲5秒。如果請求超時,會捕獲requests.exceptions.Timeout異常,並輸出重試信息。如果發生其他異常,會捕獲requests.exceptions.RequestException並輸出相關信息。

你可以調整max_retriestimeout的值來適應需求。

 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章