Zum Inhalt

403 Verboten: Der Fluch der Web Scraper (und wie man ihn vermeidet)

  • by
  • Blog
  • 8 min gelesen

Wenn Sie jemals versucht haben, Daten von Websites zu extrahieren, sind Sie mit ziemlicher Sicherheit irgendwann auf den gefürchteten Fehler „403 Forbidden“ gestoßen. Dieser HTTP-Statuscode zeigt an, dass der Server Ihre Anfrage verstanden hat, sich jedoch weigert, sie zu erfüllen. Mit anderen Worten: Sie haben keine Berechtigung, auf die von Ihnen angeforderte Ressource zuzugreifen.

Für Web-Scraper bereiten 403-Fehler ständig Kopfzerbrechen. Websites nutzen sie, um unbefugten Zugriff auf Seiten zu verhindern und Datenverkehr zu blockieren, der scheinbar von Bots oder Scrapern und nicht von menschlichen Benutzern stammt. Eine 403-Antwort zu erhalten, kann Ihr Web-Scraping-Projekt völlig zum Erliegen bringen.

Aber verzweifeln Sie nicht! Auch wenn 403-Fehler frustrierend sein können, sind sie nicht unüberwindbar. Mit den richtigen Techniken ist es möglich, das Auslösen von 403-Fehlern zu vermeiden und dafür zu sorgen, dass Ihr Web Scraper reibungslos läuft. In diesem Leitfaden befassen wir uns mit den Ursachen von 403-Fehlern und erkunden Strategien zu deren Vermeidung. Lass uns anfangen!

Warum Web Scraper auf 403-Fehler stoßen

Es gibt einige Hauptgründe, warum ein Web Scraper möglicherweise eine 403 Forbidden-Antwort von einer Website erhält:

  1. Anfordern einer eingeschränkten Ressource: Einige Seiten sind für unbefugte Benutzer einfach tabu. Wenn Sie beispielsweise versuchen, auf eine Seite zuzugreifen, für die eine Anmeldung erforderlich ist, z. B. ein Benutzer-Dashboard, wird häufig ein 403-Fehler ausgegeben, wenn Sie keine gültige Sitzung haben.

  2. Fehlende Authentifizierung: Viele Websites erfordern für den Zugriff auf bestimmte Seiten eine Form der Authentifizierung, z. B. die Anmeldung mit einem Benutzernamen und einem Passwort. Wenn Ihr Web Scraper nicht die erforderlichen Authentifizierungsdaten bereitstellt, wird er wahrscheinlich eine 403-Antwort erhalten.

  3. Bot-Erkennung: Websites verwenden häufig verschiedene Techniken, um Datenverkehr zu erkennen und zu blockieren, der scheinbar von Bots oder Scrapern stammt. Wenn eine Website davon ausgeht, dass es sich bei Ihrem Web Scraper um ein automatisiertes Tool und nicht um einen menschlichen Benutzer handelt, antwortet sie möglicherweise mit einem 403-Fehler.

  4. Anti-Bot-Systeme: Einige Websites verwenden spezielle Anti-Bot-Lösungen wie Cloudflare, Imperva oder PerimeterX, um sich vor Scraping und anderen automatisierten Bedrohungen zu schützen. Diese Systeme analysieren Verkehrsmuster und blockieren verdächtige Anfragen, wobei häufig 403-Fehler zurückgegeben werden.

Um Websites erfolgreich zu crawlen, müssen wir diese Probleme vermeiden und Websites davon überzeugen, dass es sich bei unserem Web Scraper um einen legitimen, autorisierten Benutzer handelt. Glücklicherweise gibt es mehrere Ansätze, die wir verfolgen können. Schauen wir uns einige der effektivsten Taktiken an.

Bereitstellung der Authentifizierung

Wenn eine Website eine Anmeldung erfordert, um auf den Inhalt zuzugreifen, den Sie scrapen möchten, müssen Sie die Authentifizierung in Ihren Web-Scraping-Prozess einbeziehen. Dies umfasst typischerweise zwei Schritte:

  1. Überprüfung des Anmeldevorgangs: Verwenden Sie die Entwicklertools Ihres Browsers, um den Netzwerkverkehr zu beobachten, wenn Sie sich manuell bei der Site anmelden. Suchen Sie nach der Anfrage, die die Anmeldeinformationen übermittelt, und notieren Sie sich die URL, die Anfragemethode, die Header und den Anfragetext. Sie müssen diese Anfrage in Ihrem Web Scraper replizieren.

  2. Programmgesteuerte Anmeldung: Verwenden Sie eine Bibliothek wie Requests von Python oder Axios von Node.js, um eine Anmeldeanforderung zu senden, die der von Ihnen beobachteten nachahmt. Erfassen Sie alle von der Website zurückgegebenen Cookies, da diese häufig Sitzungstoken enthalten, die zur Authentifizierung nachfolgender Anfragen erforderlich sind. Fügen Sie diese Cookies in die Header Ihrer Web-Scraping-Anfragen ein, um eine gültige Anmeldesitzung aufrechtzuerhalten.

Hier ist ein Beispiel für die programmgesteuerte Anmeldung bei einer Site mithilfe von Python und Requests:

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

Indem Sie Ihren Web Scraper authentifizieren und die erforderlichen Cookies und Header in Ihre Anfragen einbeziehen, können Sie 403-Fehler vermeiden, die durch fehlende Berechtigungen verursacht werden.

Stealth-Techniken

Natürlich reicht es nicht immer aus, sich anzumelden. Websites befinden sich in einem ständigen Katz-und-Maus-Spiel mit Web-Scrapern und suchen nach Signalen, die Bots von menschlichen Benutzern unterscheiden. Um nicht blockiert zu werden, müssen Web-Scraper so gut wie möglich menschliches Verhalten nachahmen.

Zu den wichtigsten Stealth-Techniken gehören:

  • Rotierende Benutzeragenten: Der Benutzeragent ist eine Zeichenfolge, die den Client identifiziert, der eine Anfrage stellt. Die Verwendung desselben Benutzeragenten für alle Anfragen ist ein eindeutiger Hinweis darauf, dass der Datenverkehr von einem Bot stammt. Pflegen Sie stattdessen einen Pool von Benutzeragentenzeichenfolgen und wählen Sie für jede Anfrage zufällig eine andere aus.

  • Rotierende IP-Adressen: Das Senden einer großen Anzahl von Anfragen von einer einzelnen IP-Adresse ist ein weiteres Warnsignal für Bot-Erkennungssysteme. Verwenden Sie einen Proxy-Dienst, um Anfragen über verschiedene IP-Adressen weiterzuleiten. Um optimale Ergebnisse zu erzielen, wählen Sie einen Anbieter, der einen großen Pool an privaten IPs bietet.

  • Randomisieren von Anforderungsmustern: Menschen durchsuchen Websites nicht auf ganz normale Weise. Sie pausieren, wechseln unregelmäßig die Seite und variieren die Zeitspanne zwischen den Anfragen. Fügen Sie zufällige Verzögerungen zwischen Ihren Web-Scraping-Anfragen ein und vermeiden Sie das Crawlen von Websites in einem perfekt vorhersehbaren Muster.

  • Umgang mit CAPTCHAs: Einige Websites zeigen CAPTCHAs an, wenn sie eine Bot-Aktivität vermuten. CAPTCHAs können für Web-Scraper schwierig automatisch zu lösen sein. Wenn Sie häufig auf sie stoßen, müssen Sie möglicherweise einen CAPTCHA-Lösungsdienst nutzen, der menschliche Mitarbeiter einsetzt, um die Herausforderungen im Namen Ihres Scrapers zu lösen.

Hier ist ein Beispiel für eine verstecktere Anfrage in Python, die einen zufälligen Benutzeragenten und Verzögerungen verwendet:

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

Indem Sie Maßnahmen ergreifen, um den Datenverkehr Ihres Web Scrapers so „menschlich“ wie möglich aussehen zu lassen, können Sie das Risiko, auf 403-Fehler und andere Hindernisse zu stoßen, erheblich reduzieren.

Nicht erkennbare Automatisierung

Für ein möglichst heimliches Web-Scraping möchten Sie möglicherweise ein vollständiges Browser-Automatisierungstool wie Puppeteer oder Playwright verwenden. Diese Tools führen einen tatsächlichen Browser (Chrome oder Firefox) programmgesteuert aus und ermöglichen Ihnen so eine Interaktion mit Websites, die kaum von echten menschlichen Benutzern zu unterscheiden ist.

Browser-Automatisierungstools können für maximale Tarnung konfiguriert werden. Sie können sie beispielsweise so einstellen, dass sie JavaScript-Fingerprinting-Code blockieren, die verräterischen Zeichen der Automatisierung in Navigator-Objekten maskieren und die Abmessungen des Ansichtsfensters zufällig anordnen. Durch die Steuerung eines echten Browsers erhalten Sie auch eine automatische Handhabung von Cookies, Headern, Weiterleitungen und anderen Aspekten von HTTP, die einfache Web-Scraping-Bibliotheken nicht für Sie verwalten.

Der Nachteil der Browser-Automatisierung besteht darin, dass sie ressourcenintensiver und langsamer ist als das Senden einfacher HTTP-Anfragen mit einer Bibliothek wie Requests oder Axios. Der Kompromiss bei der Leistung kann sich jedoch für Websites lohnen, die beim Blockieren von Scrapern besonders aggressiv vorgehen.

Hier ist ein einfaches Beispiel für die Verwendung von Puppeteer in Node.js, um eine Seite in Headless Chrome zu besuchen:

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Mit einigen zusätzlichen Konfigurationen können Tools wie Puppeteer eine leistungsstarke Möglichkeit sein, das Scraping zu automatisieren und gleichzeitig eine Erkennung zu vermeiden.

Zusammenfassung

Das Auftreten von 403-Fehlern ist ein unvermeidlicher Teil des Web-Scrapings, aber mit dem richtigen Ansatz müssen sie Ihre Projekte nicht zum Scheitern bringen. Indem Sie verstehen, warum 403-Fehler auftreten, und Maßnahmen ergreifen, um deren Auslösung zu vermeiden – durch Authentifizierung, Stealth-Techniken und nicht erkennbare Automatisierung – können Sie dafür sorgen, dass Ihr Web Scraper reibungslos läuft.

Der effektivste Ansatz hängt von den spezifischen Websites ab, auf die Sie abzielen. Einige erfordern möglicherweise nur einfache Anforderungsheader, um 403-Fehler zu vermeiden, während andere möglicherweise eine vollständige Einrichtung der Browserautomatisierung erfordern. Der Schlüssel liegt darin, mit grundlegenden Techniken zu beginnen und bei Bedarf je nach den Hindernissen, auf die Sie stoßen, ausgefeiltere Tarnschichten hinzuzufügen.

Wenn Ihnen die ständig wachsende Herausforderung, 403s und andere Anti-Scraping-Maßnahmen zu vermeiden, entmutigend vorkommt, sollten Sie die Verwendung einer handelsüblichen Web-Scraping-API in Erwägung ziehen, anstatt Ihre eigene Scraping-Infrastruktur aufzubauen und zu warten. Dienste wie ScrapingBee und ScraperAPI bieten kampferprobte Scraper mit integrierter 403-Vermeidung, die Ihnen erhebliche Entwicklungszeit einsparen können.

Unabhängig davon, ob Sie Ihren eigenen Web Scraper erstellen oder eine vorgefertigte Lösung verwenden, ist es wichtig, dass 403-Fehler Sie nicht davon abhalten, die benötigten Daten zu erhalten. Mit etwas Beharrlichkeit und den richtigen Werkzeugen können Sie Ihren Web Scraper trotz aller Anti-Bot-Gegenmaßnahmen am Laufen halten. Viel Spaß beim Schaben!

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *