Beim Web-Crawling kann die Verwendung einer Proxy-IP helfen, die Zugriffsbeschränkungen einer Website zu umgehen. Allerdings kann es bei Proxy-IPs manchmal zu Problemen mit Timeouts bei Anfragen kommen. Hier sind einige Methoden und Tipps zum Umgang mit Proxy-IP-Anfrage-Timeouts.
Proxy-IP-Verfügbarkeit prüfen
Erstens müssen Sie sicherstellen, dass die Proxy-IP verfügbar ist. Proxy-IPs können aus verschiedenen Gründen nicht verfügbar sein (z. B. Serverausfall, Netzwerkprobleme usw.). Sie können eine Funktion schreiben, um die Verfügbarkeit der Proxy-IP zu prüfen:
Einfuhrgesuche
def check_proxy(proxy): url = "
url = "http://www.google.com"
try: response = requests.get(url, proxies=proxy, timeout=5)
response = requests.get(url, proxies=proxy, timeout=5)
if response.status_code == 200:: url = "
return True
except requests.RequestException: return False
RequestException: return False
return False
# Beispiel Proxy-IP
proxy = {"http": "http://123.45.67.89:8080", "https": "https://123.45.67.89:8080"}
if check_proxy(proxy).
print("Proxy-IP verfügbar")
else: if check_proxy(proxy): print("Proxy IP verfügbar")
print("Proxy-IP nicht verfügbar")
Einstellen einer angemessenen Zeitspanne
Beim Senden einer Webanforderung kann die Einstellung einer angemessenen Zeitüberschreitung lange Wartezeiten vermeiden. Hier erfahren Sie, wie Sie die Timeout-Zeit in der Anforderungsbibliothek einstellen:
Einfuhrgesuche
proxy = {"http": "http://123.45.67.89:8080", "https": "https://123.45.67.89:8080"}
url = "http://www.example.com"
try.
response = requests.get(url, proxies=proxy, timeout=5) # setzt timeout auf 5 Sekunden
print(antwort.text)
except requests.Timeout.
Timeout. print("Zeitüberschreitung der Anfrage")
except requests.RequestException as e: print(response.text)
RequestException as e: print(f "Anfrage fehlgeschlagen: {e}")
Proxy-Pools verwenden
Um die Stabilität und Erfolgsrate des Crawlers zu verbessern, können Sie einen Proxy-Pool verwenden. Ein Proxy-Pool ist eine Liste von Proxy-IPs, die automatisch auf die nächste Proxy-IP umgeschaltet werden kann, wenn eine Anfrage von einer der Proxy-IPs eine Zeitüberschreitung erfährt.1 Nachfolgend finden Sie ein Beispiel für eine einfache Implementierung eines Proxy-Pools:
Anfragen importieren
zufällig importieren
# Proxies-Liste
proxies_list = [
{"http": "http://123.45.67.89:8080", "https": "https://123.45.67.89:8080"},
{"http": "http://234.56.78.90:8080", "https": "https://234.56.78.90:8080"},
{"http": "http://345.67.89.01:8080", "https": "https://345.67.89.01:8080"}, {"http": "http://345.67.89.01:8080", "https": "https://345.67.89.01:8080"}, }
# Hinzufügen weiterer Proxy-IPs
]
# Anfrage-Funktion
def fetch_url(url).
while proxies_list.
proxy = random.choice(proxies_list)
try.
response = requests.get(url, proxies=proxy, timeout=5)
return antwort.text
except requests.
RequestException: print(f "Proxy {proxy} request failed, try next proxy")
proxies_list.remove(proxy)
return "Alle Proxy-IPs sind nicht verfügbar."
# Ziel-URL
url = "http://www.example.com"
ergebnis = fetch_url(url)
print(ergebnis)
Inanspruchnahme hochwertiger Vertretungsdienste
Kostenlose Proxy-IPs sind in der Regel instabil und langsam, und es wird empfohlen, einen hochwertigen kostenpflichtigen Proxy-Dienst zu verwenden. Kostenpflichtige Proxy-Dienste bieten eine höhere Zuverlässigkeit und Geschwindigkeit und können das Problem der Zeitüberschreitungen bei Anfragen deutlich verringern.
Hinzufügen eines Wiederholungsmechanismus
Durch einen Mechanismus zur Wiederholung einer fehlgeschlagenen Anfrage wird die Wahrscheinlichkeit erhöht, dass die Anfrage erfolgreich ist. Nachstehend finden Sie ein einfaches Beispiel für einen Wiederholungsmechanismus:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# Ein Session-Objekt erstellen
session = requests.Session()
# Definieren Sie eine Wiederholungsstrategie
retry_strategy = Wiederholung(
total=3, # Anzahl der Wiederholungsversuche
backoff_factor=1, # Multiplikator für Wiederholungsintervall
status_forcelist=[429, 500, 502, 503, 504], # Statuscode, der einen erneuten Versuch erfordert
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
# Proxy-IP
proxy = {"http": "http://123.45.67.89:8080", "https": "https://123.45.67.89:8080"}
url = "http://www.example.com"
try.
response = session.get(url, proxies=proxy, timeout=5)
print(antwort.text)
except requests.
RequestException as e: print(f "Anfrage fehlgeschlagen: {e}")
Zusammenfassungen
Mit den oben genannten Methoden und Tipps können Sie das Problem der Zeitüberschreitung bei Proxy-IP-Anfragen effektiv lösen. Ob Sie nun die Verfügbarkeit von Proxy-IPs überprüfen, angemessene Timeouts festlegen, Proxy-Pools verwenden, qualitativ hochwertige Proxy-Dienste auswählen oder einen Mechanismus zur Wiederholung von Anfragen hinzufügen - all diese Methoden können die Stabilität und die Erfolgsquote Ihres Crawlers verbessern.
Ich hoffe, dieser Artikel hilft Ihnen, das Problem der Zeitüberschreitung bei Proxy-IP-Anfragen besser in den Griff zu bekommen, und wünsche Ihnen einen reibungslosen und effizienten Datenerfassungsprozess!