Bei der täglichen Online-Datenverwaltung und beim Web-Scraping kommt es häufig vor, dass fehlerhafte Proxy-Nachrichten auftreten. Diese Fehlercodes sind wichtige Indikatoren für Fehler bei der Datenbereitstellung mit Proxys und spielen eine wichtige Rolle bei der Diagnose und Lösung von Problemen.
Dieser Artikel beschreibt verschiedene Arten von HTTP-Proxy-Fehlercodes und behandelt die verschiedenen Typen, Interpretationen und Bedingungen, unter denen sie für gewöhnlich auftreten.
Proxy-Fehlercodes
Proxy-Fehler können aus verschiedenen Gründen auftreten, einschließlich Serverausfällen oder inkonsistenten Einstellungen. Wenn Sie diese Details verstehen, können Sie leichter erkennen, was falsch ist und sie leichter beheben.
In den folgenden Abschnitten erfahren Sie mehr über verschiedene Proxy-Codes und wie Sie diese Fehler effektiv beheben können.
3xx-Codes: Weiterleitungen
Ein HTTP-3xx-Statuscode wird für Weiterleitungen verwendet, was darauf hinweist, dass der User-Agent zusätzliche Schritte unternehmen muss, um die Request (Anfrage) abzuschließen. In der Regel bedeutet dieser Code, dass Sie aufgrund von redaktionellen Änderungen oder einer Umstrukturierung der Website zu einer neuen URL weitergeleitet werden.
Wenn es um Web-Scraping geht, müssen Sie sich mit diesen Weiterleitungen befassen, um eine genaue und effektive Datenerfassung zu gewährleisten.
301: Moved Permanently
Wenn Sie einen 301
-Fehler erhalten, wurde die von Ihnen gesuchte Ressource dauerhaft verschoben. Dies passiert häufig, wenn eine Website aktualisiert wird, z. B. wenn ihr Inhalt neu gestaltet oder neu organisiert wird.
Wenn dieser Fehler auftritt, muss Ihr Scraper seine URL-Verweise aus den Response-Headern an den neuen Ort übertragen:
response_data = requests.get('http://example.com/old-page')
if response_data.status_code == 301:
new_redirect_url = response_data.headers['Location']
response_data = requests.get(new_redirect_url)
In diesem Code weisen Sie Ihren Scraper an, die Weiterleitungsadresse abzurufen, die aus dem Header stammt. Dann greift er auf den Inhalt an seinem neuen Standort zu:
302: Found (Temporary Redirect)
Der Statuscode 302 Found
signalisiert, dass die Ressource, auf die Sie zugreifen möchten, vorübergehend auf eine andere URL verschoben wurde. In diesem Fall ist die Änderung nicht dauerhaft und die ursprüngliche URL wird voraussichtlich irgendwann wieder funktionsfähig sein. Dies passiert häufig, wenn eine Website gerade gewartet wird.
Beim Web-Scraping ist es wichtig, dass Ihr Skript so konfiguriert wird, dass Weiterleitungen automatisch verarbeitet werden, um sicherzustellen, dass die gespeicherten URLs unverändert bleiben. Während viele HTTP-Bibliotheken, wie Python requests, 302
-Weiterleitungen automatisch verarbeiten, ist es wichtig zu überprüfen, ob dieses Verhalten mit Ihren Scraping-Zielen übereinstimmt, insbesondere wenn die Beibehaltung der ursprünglichen Anfragemethode erforderlich ist:
304: Not Modified
Wenn der Inhalt, auf den Sie zugreifen möchten, seit der letzten validierten Anfrage nicht aktualisiert wurde, erhalten Sie den Fehler 304
. Dieser Fehler trägt dazu bei, die Effizienz von Web-Scraping-Aktivitäten zu erhöhen und das Herunterladen unnötiger Daten zu verhindern.
Wenn Ihr Scraper auf eine Seite zugreift, die bereits heruntergeladen wurde, können die Request-Header wie If-Modified-Since
oder If-None-Match
verwendet werden, um zu überprüfen, ob der Inhalt nicht geändert wurde:
import requests
# Correct header format and Python syntax
headers = {'If-Modified-Since': 'Sat, Oct 29 2024 19:43:31 GMT'}
# Making a GET request to the server with the headers
response = requests.get('http://example.com/page', headers=headers)
# Checking if the status code returned is 304
if response.status_code == 304:
print("Content has not changed.")
In diesem Code testen Sie zunächst, ob der Antwortcode 304
lautet. Wenn er „true“ ist, wird Der Nachrichteninhalt hat sich nicht geändert (Message Content has not changed)
ausgegeben, und Sie müssen nichts tun:
307: Temporary Redirect
Eine temporäre Weiterleitung, Statuscode 307
, teilt Ihnen mit, dass die Ressource, die Sie zu erreichen versuchen, vorübergehend unter einer anderen URL platziert ist. In diesem Fall können dieselbe HTTP-Methode und der gleiche Text der ursprünglichen Anfrage mit der umgeleiteten URL wiederverwendet werden. Dies unterscheidet sich von 302
, wo die umgeleitete URL eine andere Methode und einen anderen Body verwenden kann:
response = requests.post('http://examples.com/submit-form', data={'key': 'value'} )
if response.status_code == 307:
response = requests.post(response.headers['Location'], data={'key': 'value'})
Sie müssen die Reihenfolge beibehalten, wenn Sie einen Webcrawler umleiten. Dies trägt dazu bei, eine zuverlässige und effektive Datenerfassung zu gewährleisten und gleichzeitig die Struktur und das Serversystem der Zielwebsite zu respektieren. Der folgende Code überprüft, ob der Antwortstatus 307
ist; wenn er „true“ ist, sendet er dieselben Daten im Hauptteil erneut an die neue Position
, die im Antwortheader angegeben ist:
4xx-Codes: Clientseitige Fehler
Clientseitige Fehler werden durch einen 4xx-Bereich von HTTP-Statuscodes angezeigt und resultieren in der Regel aus einem Problem mit der vom Client gestellten Anfrage. Oft führen diese Fehler zur Korrektur von Anfrageparametern oder zur operativen Verbesserung der Authentifizierungsmechanismen.
400: Bad Request
Der Fehler 400 Bad Request
weist darauf hin, dass der Server die Anfrage nicht verstehen konnte. Beim Web-Scraping passiert dies normalerweise, wenn der Request-Header nicht korrekt geschrieben ist oder Teile fehlen.
Wenn Sie beispielsweise versehentlich Informationen im falschen Format senden (z. B. sendet Text statt JSON), kann der Server die Anfrage nicht bearbeiten und sie wird abgelehnt. Um diesen Fehler zu beheben, müssen Sie die Validierung sorgfältig durchführen und sicherstellen, dass die Anfragesyntax den Erwartungen des Servers entspricht.
Beim Web-Scraping müssen Sie mehrere Schritte ausführen, um zu überprüfen, ob Ihre Anfragen den Erwartungen des Servers entsprechen. Zunächst müssen Sie sicherstellen, dass Sie die Struktur der Zielwebsite verstehen. Sie können die Browser-Entwicklertools verwenden, um Elemente zu überprüfen und herauszufinden, wie die Daten formatiert sind. Außerdem sollten Sie Tests und Fehlerbehandlung implementieren und sicherstellen, dass Sie die richtigen Header in Ihren Anfragen verwenden:
401: Unauthorized
Der Fehler 401 Unauthorized
weist auf eine fehlgeschlagene oder fehlende Authentifizierung hin, die für den Zugriff auf eine Ressource erforderlich ist. Beim Web-Scraping passiert dies häufig, wenn versucht wird, authentifizierte Inhalte zu erreichen. Beispielsweise löst der Zugriff auf abonnementbasierte Daten mit falschen Anmeldedaten diesen Fehler aus. Um dies zu vermeiden, stellen Sie sicher, dass Sie die richtigen Authentifizierungs-Header in Ihre Anfragen aufnehmen:
403: Forbidden
Ein 403 Forbidden
-Fehler bedeutet, dass der Server die Anfrage verstehen konnte, Ihnen aber den Zugriff auf die Ressource verweigert hat. Dies tritt häufig beim Web-Scraping einer Website auf, für die strenge Zugriffskontrollen gelten. Sie stoßen häufig auf diesen Fehler, wenn Sie einen verbotenen Teil einer Website aufrufen. Wenn Sie sich beispielsweise als Benutzer authentifizieren und versuchen, auf die Posts eines anderen Benutzers zuzugreifen, können Sie dies nicht tun, weil Sie keine Berechtigung dazu haben:
Wenn Sie einen 403
-Fehler erhalten, verifizieren Sie die Autorisierung, indem Sie Ihre Schlüssel oder Anmeldedaten überprüfen. Wenn die Autorisierung nicht verfügbar ist und Sie keine gültigen Anmeldedaten haben, sollten Sie davon absehen, diese Inhalte zu scrapen, um die Zugangsrichtlinien der Website einzuhalten.
404: Not Found
Wenn der Server die angeforderte Ressource nicht finden kann, gibt er den Fehler 404 Not Found
zurück.
Dies passiert häufig, wenn beim Web-Scraping verwendete URLs geändert oder beschädigt werden, z. B. wenn eine Produktseite gelöscht oder ihre URL ohne Weiterleitung oder Aktualisierung geändert wird.
Um diesen Fehler zu beheben, überprüfen Sie die URLs in Ihrem Scraping-Skript und aktualisieren Sie sie nach Bedarf, um sie an die aktuelle Website-Struktur anzupassen:
Es wird immer empfohlen, dass Sie alle 404
-Fehler in Ihrem Code behandeln.
Wenn Sie Python verwenden und der Server die Ressource nicht gefunden hat, können Sie Ihren Code anweisen, den folgenden Codeblock zu übergehen, damit Ihr Code bei diesem Fehler nicht abbricht:
import requests
# List of URLs to fetch
urls = [
"http://example.com/nonexistentpage.html", # This should result in 404
"http://example.com" # This should succeed
]
for url in urls:
try:
response = requests.get(url)
if response.status_code == 404:
print(f"Error 404: URL not found: {url}")
# Continue to the next URL in the list
continue
print(f"Successfully retrieved data from {url}")
print(response.text[:200]) # Print the first 200 characters of the response content
except requests.exceptions.RequestException as e:
print(f"An error occurred while fetching {url}: {e}")
continue # Continue to the next URL even if a request exception occurs
print("Finished processing all URLs.")
Im folgenden Code iterieren Sie über das Array von URLs und versuchen dann, den Seiteninhalt abzurufen. Wenn dies mit einem Fehler von 400
fehlschlägt, fährt der Code mit der nächsten URL im Array fort.
407: Proxy Authentication Required
Der Fehler 407 Proxy Authentication Required
wird ausgelöst, wenn sich der Client beim Proxy-Server authentifizieren muss, damit die Anfrage fortgesetzt werden kann. Dieser Fehler tritt häufig beim Web-Scraping auf, wenn der Proxy-Server eine Authentifizierung benötigt. Dies unterscheidet sich von einem 401
-Fehler, bei dem eine Authentifizierung erforderlich ist, um auf Daten zuzugreifen, die sich auf die Zielwebsite beziehen.
Wenn dieser Fehler beispielsweise auftritt, wenn Sie einen privaten Proxy verwenden, um auf Daten von einer Zielwebsite zuzugreifen, sind Sie nicht authentifiziert. Um diesen Fehler zu beheben, sollten Sie Ihren Anfragen gültige Proxy-Authentifizierungsdetails hinzufügen:
408: Request Timeout
Ein 408 Request Timeout
-Statuscode gibt an, dass der Server zu lange auf die Anfrage gewartet hat. Dieser Fehler kann auftreten, wenn Ihr Scraper zu langsam oder der Server überlastet ist, insbesondere zu Spitzenzeiten.
Wenn das Anfragetiming optimiert ist und Wiederholungen mit exponentiellen Backoff-Mechanismen implementiert werden, kann dieses Problem minimiert werden, da der Server genügend Zeit hat, um zu antworten:
429: Too Many Requests
Der Fehler 429 Too Many Requests
wird ausgelöst, wenn ein Benutzer innerhalb eines kurzen Zeitrahmens viele Anfragen gesendet hat. Dies tritt häufig auf, wenn die Web-Scraping-Ratenlimits auf einer Website überschritten werden. Wenn Sie beispielsweise häufig eine Website abfragen, wird das Ratenlimit aktiviert und Sie werden daran gehindert, Daten zu scrapen.
Stellen Sie sicher, dass Sie die angestrebten API-Ratenbeschränkungen für Websites einhalten und einige Best Practices für das Scraping anwenden, z. B. das Verzögern der Anfragen, wodurch dieser Fehler verhindert und der Zugriff auf die erforderlichen Ressourcen aufrechterhalten werden kann:
5xx-Codes: Serverseitige Fehler
Serverseitige Fehler werden durch eine 5xx-Serie von HTTP-Statuscodes angezeigt und beziehen sich auf die Unfähigkeit des Servers, Anfragen aufgrund interner Probleme zu erfüllen. Sie müssen diese Fehler beim Web-Scraping verstehen, da sie oft einen anderen Ansatz erfordern als die Behandlung von clientseitigen Fehlern.
500: Internal Server Error
Ein 500 Internal Server Error
ist eine generische Antwort, die Sie darüber informiert, dass auf dem Server eine ungewöhnliche Situation aufgetreten ist, die es ihm nicht erlaubt hat, die spezifische Anfrage zu bearbeiten. Dieser Fehler ist nicht auf einen Fehler des Clients zurückzuführen; es bedeutet vielmehr, dass das Problem auf dem Server selbst liegt.
Dieser Fehler kann beispielsweise beim Scrapen von Daten auftreten, wenn versucht wird, auf eine Seite auf dem Server zuzugreifen. Um den Fehler zu beheben, können Sie es später erneut versuchen oder Ihre Web-Scraping-Projekte so planen, dass sie außerhalb der Spitzenzeiten stattfinden und der Server nicht geladen ist:
501: Not Implemented
Der Fehler 501 Not Implemented
tritt auf, wenn der Server die Anfragemethode nicht erkennt oder diese Methode nicht abschließt. Da Sie die Methoden Ihres Crawlers normalerweise vorher testen, tritt dieser Fehler beim Web-Scraping selten auf. Er kann jedoch auftreten, wenn Sie atypische HTTP-Methoden verwenden.
Wenn Ihr Scraper beispielsweise so konfiguriert ist, dass er Methoden verwendet, die vom Server nicht unterstützt werden (z. B. PUT oder DELETE) und diese Methoden für Ihre Web-Scraping-Funktionen erforderlich sind, erhalten Sie einen 501
-Fehler. Um dies zu verhindern, stellen Sie sicher, dass diese Methoden überall erforderlich sind, wenn Ihre Scraping-Skripte HTTP-Methoden verwenden:
502: Bad Gateway
Der Fehler 502 Bad Gateway
weist darauf hin, dass der Server, obwohl er als Gateway oder Proxy fungiert, eine unangemessene Antwort vom Zielserver erhalten hat und auf ihn zugegriffen wird, um die Anfrage zu erfüllen. Dies weist auf ein Kommunikationsproblem mit den Zwischenservern hin.
Beim Web-Scraping kann der Fehler 502
auftreten, wenn der von Ihnen verwendete Proxy-Server keine angemessene Antwort vom Zielserver erhalten kann. Um dies zu beheben, überprüfen Sie, ob der Zustand und die Konfiguration Ihres Proxy-Servers funktionieren und mit den Zielservern kommunizieren können. Sie können die CPU-, Speicher- und Netzwerkbandbreitennutzung auf Ihrem Proxy-Server überwachen. Sie können auch die Fehlerprotokolle des Proxy-Servers überprüfen, die angeben können, ob es Probleme bei der Bearbeitung Ihrer Anfragen gibt:
503: Service Unavailable
Der Fehler 503 Service Unavailable
weist darauf hin, dass der Server ausgelastet ist und die Anfrage nicht bearbeiten kann. Dies kann aufgrund von Serverwartung oder Überlastung auftreten.
Beim Web-Scraping tritt dieser Fehler häufig auf, wenn Sie versuchen, auf Websites zuzugreifen, auf die während Wartungsarbeiten oder zu Spitzenzeiten nicht zugegriffen werden kann. Im Gegensatz zum Fehler 500
, der auf ein Serverproblem hinweist, weist der Fehler 503
darauf hin, dass der Server betriebsbereit, aber derzeit nicht verfügbar ist.
Um diesen Fehler zu vermeiden, sollten Sie eine Wiederholungsstrategie implementieren, die exponentielles Backoff verwendet. Die Backoff-Intervalle sollten sich verlängern, wenn Anfragen erneut versucht werden. Daher sollten die Anfragen während der Downtime nicht zu einer Überlastung des Servers führen:
504: Gateway Timeout
Der Fehler 504 Gateway Timeout
tritt auf, wenn der Server, der als Gateway oder Proxy fungiert, nicht rechtzeitig eine Antwort vom Upstream-Server erhält. Dieser Fehler ist ein Timeout-Problem und eine Variante des Fehlers 502
.
Beim Web Scraping tritt dieser Fehler häufig auf, wenn die Antwort vom Zielserver an Ihren Proxy zu langsam ist (d. h. mehr als 120 Sekunden gedauert hat). Um dies zu beheben, können Sie die Timeout-Einstellungen Ihres Scrapers anpassen, um längere Wartezeiten einzuhalten, oder den Zustand und die Reaktionsfähigkeit Ihres Proxy-Servers überprüfen:
505: HTTP Version Not Supported
Der Fehler 505 HTTP Version Not Supported
tritt auf, wenn der Server die in der Anfrage angegebene HTTP-Protokollversion nicht erkennt. Dies ist beim Web-Scraping ungewöhnlich, kann jedoch vorkommen, wenn der Zielserver so eingestellt ist, dass er nur bestimmte Versionen des HTTP-Protokolls unterstützt. Wenn Ihre Scraping-Anfragen beispielsweise mit einer Version ankommen, die entweder zu aktuell oder zu alt ist, akzeptiert der Server sie nicht.
Um diesen Fehler zu vermeiden, sollten Sie sicherstellen, dass Ihre HTTP-Request-Header eine Version angeben, die für den Zielserver akzeptabel ist, höchstwahrscheinlich HTTP/1.1 oder HTTP/2, die am häufigsten unterstützt werden:
Schnelle Tipps zur Vermeidung häufiger Proxy-Fehler
Proxy-Fehler können frustrierend sein, aber viele Proxy-Fehler können umgangen werden, indem Sie einige spezifische Strategien in Ihrem Web-Scraper implementieren.
Die Anfrage wiederholen
Viele Proxy-Probleme werden durch kurzfristige Fehler verursacht, wie z. B. kurze Netzwerkunterbrechungen oder kleine Serverstörungen. Wenn Sie die Anfrage wiederholen, kann das Problem möglicherweise umgangen werden, wenn der Fehler auf natürliche Weise behoben wurde.
So können Sie Wiederholungen in Ihrem Scraping-Skript mithilfe der requests
-Bibliothek von Python und der Wiederholungslogik urllib3
implementieren:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def requests_retry_session(
retries=3,
backoff_factor=0.3,
status_forcelist=(500, 502, 503, 504),
session=None,
):
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
s = requests_retry_session()
try:
response = s.get('http://example.com', proxies={"http": "http://proxy_address:port"})
print(response.text)
except requests.exceptions.HTTPError as e:
print('HTTPError:', e)
Dieser Code legt einen Wiederholungsmechanismus mit einem Backoff-Faktor fest. Das heißt, wenn eine Anfrage fehlschlägt, wiederholen Sie dieselbe Anfrage bis zu dreimal, wobei Sie jedes Mal etwas länger warten, bis der nächste Versuch erfolgt.
Proxy-Einstellungen verifizieren
Falsche Proxy-Einstellungen können zu zahlreichen Fehlern führen. Diese Fehler können beispielsweise auftreten, wenn Sie einen falschen Proxy-Port, eine falsche IP-Adresse oder falsche Authentifizierungsinformationen eingeben. Vergewissern Sie sich, dass Ihre Einstellungen Ihren Netzwerkanforderungen entsprechen, damit Anfragen ihr Ziel erreichen können.
Dokumentation und Support konsultieren
Wenn Sie bei der Verwendung eines Proxy-Dienstes oder einer Bibliothek auf ein Problem stoßen, sollten Sie immer zuerst die offizielle Dokumentation zu Rate ziehen. Wenn Sie in der Dokumentation nicht finden können, was Sie suchen, sehen Sie nach, ob der Dienst oder die Bibliothek einen Slack- oder Discord-Kanal hat, dem Sie beitreten können. Schließlich können Sie jederzeit ein Ticket im Support-Kanal öffnen oder eine E-Mail mit den Details und den Fragen senden, auf die Sie Antworten wünschen.
Fazit
In diesem Artikel erfahren Sie alles über die verschiedenen Proxy-Fehlercodes und ihre Bedeutungen. So können Sie die einzelnen Fehler identifizieren und Probleme beim Web-Scraping beheben. Sie haben auch einige hilfreiche Tipps kennengelernt, um häufige Fehler von vornherein zu vermeiden.
Wenn Sie mit Proxy-Fehlern zu kämpfen haben, sollten Sie erwägen, die Proxy-Dienste von Bright Data zu nutzen. Unsere Proxys können dazu beitragen, das Auftreten von Fehlern zu reduzieren und zu einem effizienteren Daten-Scraping-Prozess führen. Ganz gleich, ob Sie ein Experte oder ein Anfänger sind, die Proxy-Tools von Bright Data können Ihnen helfen, Ihre Web-Scraping-Fähigkeiten zu verbessern.
Keine Kreditkarte erforderlich