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_retries
和timeout
的值來適應需求。