Bots machen mittlerweile 51 % des gesamten Web-Traffics aus. Websites wissen das und wehren sich dagegen. Anti-Bot-Systeme von Cloudflare, Akamai und DataDome kombinieren nun IP-Reputation, TLS-Fingerprinting, Browser-Fingerprinting und Verhaltensanalyse, um Scraper zu blockieren, bevor auch nur eine einzige Zeile HTML zurückgegeben wird. Wenn Ihr Scraper immer wieder blockiert wird, erklärt Ihnen dieser Leitfaden genau, warum das so ist, und gibt Ihnen 12 konkrete Techniken an die Hand, um das Problem zu beheben.
Kurzzusammenfassung: Wie man scrapt, ohne blockiert zu werden
- Rotieren Sie IP-Adressen mithilfe von Residential-Proxys. IPs von Rechenzentren werden leicht markiert.
- Legen Sie vollständige, browserähnliche HTTP-Header fest, einschließlich
User-AgentundReferer.- Randomisieren Sie den Zeitpunkt der Anfragen mit variablen Verzögerungen zwischen 2 und 10 Sekunden.
- Verwenden Sie einen Headless-Browser mit Stealth-Plugins, um Fingerabdruck-Prüfungen zu umgehen.
- Bearbeiten Sie CAPTCHAs automatisch, da die manuelle CAPTCHA-Lösung nicht skalierbar ist.
- Passen Sie die Geolokalisierung des Proxys an die erwartete Nutzerbasis der Zielwebsite an.
- Verwenden Sie eine verwaltete Scraping-API (wie Bright Data’s Web Unlocker), um alle oben genannten Schritte zu automatisieren.
Warum Websites Web-Scraper blockieren
Zu verstehen, warum Sie blockiert werden, ist der erste Schritt, um nicht blockiert zu werden. Die Erkennung erfolgt nicht, nachdem Sie eine Seite heruntergeladen haben. Sie erfolgt oft in den ersten Millisekunden der Verbindung, bevor HTML-Daten übertragen werden. Die gängigsten Anti-Scraping-Techniken arbeiten in einer mehrschichtigen Kombination – und um sie zu umgehen, müssen alle Schichten gleichzeitig angepasst werden.
IP-basierte Erkennung
Jede Anfrage, die Sie stellen, enthält eine Quell-IP-Adresse. Anti-Bot-Systeme unterhalten Reputationsdatenbanken mit bekannten IP-Bereichen von Rechenzentren (AWS, GCP, Azure, DigitalOcean), zuvor markierten IPs und IPs mit hohem Anfragevolumen. Eine einzelne IP, die 500 Anfragen pro Minute auslöst, wird leicht identifiziert. IPs von Rechenzentren werden auf vielen Hochsicherheits-Websites standardmäßig markiert, da keine echten privaten Nutzer von einem AWS-Rechenzentrum aus auf diese Websites zugreifen.
Browser- und TLS-Fingerprinting
Jede HTTPS-Verbindung beginnt mit einem TLS-Handshake. Während der ClientHello-Phase sendet Ihr Client seine unterstützten Verschlüsselungssuiten, TLS-Version, Erweiterungen und elliptischen Kurvenpräferenzen in Klartext, bevor Inhalte ausgetauscht werden. Anti-Bot-Systeme hashen diese Daten zu einem Fingerabdruck (dem JA3- oder JA4-Standard) und vergleichen ihn mit bekannten Bot-Signaturen. Die Python-Bibliothek „requests” hat einen unverwechselbaren TLS-Fingerabdruck, der sich von jedem echten Browser unterscheidet und von Cloudflare und Akamai leicht erkannt wird.
Über TLS hinaus erkennen Websites Ihren Browsertyp anhand Dutzender JavaScript-Signale: navigator.webdriver, Canvas-Rendering-Ausgabe, WebGL-GPU-Strings, installierte Schriftarten, Bildschirmauflösung, Audio-Kontextverhalten und Plugin-Listen. Headless Chrome gibt HeadlessChrome in seiner User-Agent-Zeichenfolge preis und lässt navigator.webdriver = true gesetzt, was auf den meisten großen Anti-Bot-Plattformen ein sofortiges Erkennungssignal ist.
Verhaltensanalyse
Websites betrachten nicht nur einzelne Anfragen. Sie beobachten Muster über eine gesamte Sitzung hinweg. PerimeterX/HUMAN und ähnliche Systeme messen das Timing zwischen Anfragen, Scrollmuster, Mausbewegungsbahnen, Klickverhalten, Navigationstiefe und Sitzungsdauer. Ein Scraper, der Anfragen in genau 1,0-Sekunden-Intervallen auslöst, niemals scrollt, niemals die Maus bewegt und direkt zu tiefen Produktseiten springt, ohne die Homepage zu besuchen, ist sofort von einem Menschen zu unterscheiden.
CAPTCHAs und JavaScript-Herausforderungen
Wenn eine Website Automatisierung vermutet, sich aber nicht sicher ist, gibt sie eine Herausforderung aus. Cloudflare Turnstile, reCAPTCHA v3 und hCaptcha führen JavaScript-Prüfungen durch, die nach Automatisierungsartefakten suchen. Wenn diese Herausforderungen nicht bestanden werden oder gar keine JavaScript-Ausführung vorhanden ist, führt dies zu einer Blockierung oder einer unendlichen Weiterleitungsschleife.
Honeypot-Fallen
Einige Websites fügen versteckte Links in ihren HTML-Code ein, die für echte Benutzer über CSS (display: none) unsichtbar sind, aber für Scraper, die rohen HTML-Code parsen, vollständig zugänglich sind. Wenn Sie diesen Links folgen, werden Sie sofort als Bot markiert. Ein Scraper, der blind jedem <A href> -Tag in einem Dokument folgt, wird irgendwann auf einen solchen Link stoßen.
Die besten Techniken, um Websites zu scrapen, ohne blockiert zu werden
1. Rotieren Sie Ihre IP-Adressen mit Proxys
IP-Rotation ist die grundlegendste Technik zur Vermeidung von Erkennung. Anstatt alle Anfragen von einer einzigen IP-Adresse zu senden, verteilt ein Proxy-Pool den Traffic auf Hunderte oder Tausende von IPs, sodass keine einzelne IP ein verdächtiges Anfragevolumen ansammelt. Das Erlernen der Rotation von Proxys in Python ist eine wesentliche Fähigkeit für jeden, der einen ernsthaften Scraper entwickelt.
Das Grundmuster: Leiten Sie jede Anfrage über einen anderen Proxy-Endpunkt und implementieren Sie eine automatische Wiederholungslogik, wenn eine IP-Adresse blockiert wird.
import requests
from itertools import cycle
import random
import time
proxies = [
"http://proxy1.example.com:8080",
"http://proxy2.example.com:8080",
"http://proxy3.example.com:8080",
]
proxy_pool = cycle(proxies)
def fetch(url):
proxy = next(proxy_pool)
try:
response = requests.get(
url,
proxies={"http": proxy, "https": proxy},
timeout=10
)
response.raise_for_status()
return response.text
except requests.exceptions.RequestException as e:
print(f"Proxy {Proxy} failed: {e}")
return None
# Add a random delay between requests to avoid rate limiting
time.sleep(random.uniform(2, 6))
Ein Vorgang mit hohem Volumen erfordert mehr als eine einfache Round-Robin-Rotation. Er erfordert intelligentes Sitzungsmanagement, automatische IP-Stilllegung und geotargetete Auswahl. Aus diesem Grund verwenden Produktions-Scraper eine verwaltete Proxy-Infrastruktur anstelle einer statischen Liste.
2. Verwenden Sie Residential-Proxys oder Mobile-Proxys
Nicht alle Proxys sind gleich. Bei der Wahl zwischen Datacenter-Proxys und Residential-Proxys muss ein grundlegender Kompromiss zwischen Kosten und Erkennungsrisiko gefunden werden. Datacenter-Proxys leiten den Traffic über Cloud-Server-IPs weiter: schnell, günstig, aber für jedes Anti-Bot-System mit einer ASN-Blockliste sofort als nicht menschlich erkennbar.
Residential-Proxys leiten den Traffic über echte, vom ISP zugewiesene IP-Adressen weiter, die mit tatsächlichen Privat- und Geschäftsanschlüssen verbunden sind. Für eine Zielwebsite sieht die Anfrage so aus, als stamme sie von einem echten Nutzer in einer bestimmten Stadt mit einem bestimmten ISP. Mobile-Proxys gehen noch einen Schritt weiter, indem sie den Traffic über echte IP-Adressen von Mobilfunkanbietern (4G/5G) leiten, die noch weniger wahrscheinlich auf einer Blacklist landen, da die Anbieter CGNAT verwenden (eine IP-Adresse, die von vielen echten Nutzern gemeinsam genutzt wird).
| Proxy-Typ | Erkennbarkeit | Geschwindigkeit | Am besten geeignet für |
|---|---|---|---|
| Rechenzentrum | Hoch | Sehr schnell | Standorte mit geringer Sicherheit, hohes Volumen |
| ISP/Statisch Wohnbereich | Mittel | Schnell | Konsistente Identität, kontobasiertes Scraping |
| Privat | Niedrig | Mittel | E-Commerce, Reisen, soziale Plattformen |
| Mobil | Sehr niedrig | Mittel | Mobilgerätespezifische Inhalte, aggressive Websites |
Bright Data betreibt ein Netzwerk von über 150 Millionen Residential-IPs in mehr als 195 Ländern und ist damit das größte ethisch einwandfreie Proxy-Netzwerk auf dem Markt. Für Fälle, in denen sogar Residential-IPs gesperrt werden, bieten über 7 Millionen mobile IP-Adressen ein Höchstmaß an Vertrauenswürdigkeit.
3. Realistische Request-Header festlegen
Die Python-Bibliothek „requests” sendet standardmäßig nur ein Minimum an Headern. Im Vergleich zu einem echten Chrome-Browser ist der Unterschied sofort offensichtlich:
# Was Requests standardmäßig sendet:
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
# Was Chrome 121 tatsächlich sendet:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Websites überprüfen die Header „Accept“, „Accept-Language“, „Accept-Encoding“, „Sec-Fetch-*“ und die Reihenfolge der Header, um echte Browser von Skripten zu unterscheiden. Legen Sie Header fest, die mit dem tatsächlichen Browser übereinstimmen, für den Sie sich ausgeben, einschließlich des Referer-Headers, wenn Sie zwischen Seiten derselben Domain navigieren. Weitere Informationen finden Sie in unserem Leitfaden zu HTTP-Headern für das Web-Scraping.
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
„Accept-Encoding”: „gzip, deflate, br”,
„Referer”: „https://www.google.com/”,
„Sec-Fetch-Dest”: „document”,
„Sec-Fetch-Mode”: „navigate”,
„Sec-Fetch-Site”: „cross-site”,
„Upgrade-Insecure-Requests”: „1”,
}
response = requests.get(url, headers=headers)
4. User-Agents rotieren
Das Senden derselben User-Agent-Zeichenfolge bei jeder Anfrage ist ein weiteres leicht zu erkennendes Kennzeichen. Nicht alle echten Benutzer verwenden Chrome 121 unter Windows 10. Erstellen Sie einen Pool mit realistischen, kürzlich aktiven User-Agent-Zeichenfolgen und rotieren Sie diese. Die wichtigste Regel: Der User-Agent, zu dem Sie rotieren, muss intern konsistent sein. Wenn Sie behaupten, Chrome unter macOS zu verwenden, sollten Ihre Accept-Language- und Sec-CH-UA-Header dies widerspiegeln.
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0",
„Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 wie Mac OS X) AppleWebKit/605.1.15 (KHTML, wie Gecko) Version/17.2 Mobile/15E148 Safari/604.1”,
]
headers["User-Agent"] = random.choice(user_agents)
Halten Sie Ihren User-Agent-Pool auf dem neuesten Stand. Browser-Versionen aus dem Jahr 2021 sind selbst ein Erkennungssignal, da sie statistisch gesehen wahrscheinlich keinen echten Traffic im Jahr 2026 darstellen.
5. Verwalten Sie TLS-Fingerabdrücke
Dies ist die am häufigsten übersehene Technik und diejenige, die Scraper besiegt, die alles andere richtig gemacht haben.
Wenn die Python-Bibliothek „requests” eine HTTPS-Verbindung initiiert, sendet der zugrunde liegende TLS-Stack (OpenSSL oder ähnliches) einen ClientHello mit einer bestimmten Kombination aus Verschlüsselungssuiten und Erweiterungen. Diese Kombination wird zu einem JA3-Wert gehasht, der eindeutig nicht vom Browser stammt. Cloudflare, Akamai und DataDome überprüfen diesen Fingerabdruck, bevor sie Inhalte bereitstellen, sodass Sie blockiert werden können, bevor Ihre Header überhaupt ausgewertet werden.
Die Lösung: Verwenden Sie einen HTTP-Client, der den TLS-Stack eines echten Browsers imitiert. curl_cffi ist der aktuelle Standard für Python:
from curl_cffi import requests as curl_requests
# impersonate="chrome121" weist curl_cffi an, genau die TLS-Verschlüsselungssuiten, Erweiterungen und HTTP/2-Einstellungen von Chrome 121 zu verwenden.
# TLS cipher suites, extensions, and HTTP/2 settings
response = curl_requests.get(
"https://example.com",
impersonate="chrome121",
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
})
print(response.status_code)
curl_cffi umfasst curl-impersonate, eine Version von libcurl, die echte Browser-TLS-Fingerabdrücke auf kryptografischer Ebene nachahmt. Die entscheidende Voraussetzung: Ihr User-Agent muss mit dem Browserprofil übereinstimmen, das Sie imitieren. Das Senden eines Chrome 121 TLS-Fingerabdrucks zusammen mit einem Firefox User-Agent führt zu einer Inkonsistenz, die von fortschrittlichen Systemen erkannt wird.
Für den Einsatz im Produktionsmaßstab übernimmt Bright Data’s Web Unlocker automatisch den Abgleich von TLS-Fingerabdrücken, ohne dass eine Bibliotheksverwaltung erforderlich ist.
6. Verwenden Sie einen Headless-Browser mit Stealth-Plugins
Wenn die Zielwebsite JavaScript-Herausforderungen ausführt, benötigen Sie einen echten Browser. Das Verständnis, was ein Headless-Browser ist und wie er funktioniert, bildet die Grundlage für diese Technik. Playwright und Puppeteer automatisieren Chromium und ermöglichen die vollständige Ausführung von JavaScript, die Verarbeitung von Cookies und die dynamische Darstellung von Inhalten.
Das Problem: Der standardmäßige Headless Chrome wird leicht erkannt. Er gibt navigator.webdriver = true, eine HeadlessChrome -User-Agent-Zeichenfolge, fehlende Browser-Plugins und abnormale Bildschirmabmessungen preis. Cloudflares Turnstile und ähnliche Systeme führen über 200 JavaScript-Prüfungen durch und erkennen eine standardmäßige Playwright-Sitzung innerhalb von Millisekunden.
Die Lösung ist playwright-stealth, ein Plugin, das diese Erkennungsvektoren patcht:
from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# Patcht navigator.webdriver, Chrome-Laufzeit, iframe-Inhaltsfenster,
# Mediencodecs und andere Automatisierungsartefakte.
stealth_sync(page)
page.goto("https://example.com")
print(page.title())
browser.close()
playwright-stealth behandelt die gängigsten Erkennungsvektoren: navigator.webdriver, window.chrome, navigator.plugins, navigator.languages und Inkonsistenzen in der Berechtigungs-API. Für Selenium-Benutzer ist undetected-chromedriver das Äquivalent, das ChromeDriver auf Binärniveau patcht.
Wichtige Einschränkung: Stealth-Plugins reduzieren das Erkennungsrisiko, beseitigen es jedoch nicht vollständig. Cloudflare Turnstile und Akamai Bot Manager haben sich erheblich weiterentwickelt und können auch gepatchte Headless-Browser erkennen. Für maximale Zuverlässigkeit bietet Bright Data mit Scraping-Browser eine vorab gehärtete Browserumgebung, die speziell dafür entwickelt wurde, diese Prüfungen ohne jegliche Plugin-Konfiguration zu bestehen.
7. Randomisieren Sie das Timing und Verhalten von Anfragen
Scraper, die Anfragen in festen Intervallen auslösen, selbst wenn diese großzügig bemessen sind, können durch Zeitanalyse erkannt werden. Echte Benutzer besuchen Seiten nicht alle 2,0 Sekunden. Sie lesen, scrollen, klicken herum, machen Pausen und navigieren nicht linear.
Verwenden Sie für Verzögerungen eine Gaußsche (normale) Verteilung. Dies erzeugt menschenähnliche Schwankungen, bei denen die meisten Verzögerungen um einen Mittelwert herum liegen, aber gelegentlich auch länger dauern:
import numpy as np
import time
import random
def human_delay(mean=4.0, std=1.5, min_delay=1.0):
"""Generate a human-like delay using normal distribution."""
delay = np.random.normal(mean, std)
# Sicherstellen, dass wir nicht unter das Minimum fallen
delay = max(delay, min_delay)
time.sleep(delay)
# Zwischen Seitenaufrufen
human_delay(mean=4.0, std=1.5)
# Zwischen Aktionen auf derselben Seite (schneller)
human_delay(mean=1.2, std=0.4)
Simulieren Sie mit Playwright über das Timing hinaus ein realistisches Sitzungsverhalten: Scrollen Sie die Seite schrittweise, bevor Sie Daten extrahieren, bewegen Sie die Maus vor dem Klicken zu Elementen und variieren Sie den Einstiegspunkt Ihres Crawls, anstatt immer direkt zur Ziel-URL zu navigieren.
# Simulieren Sie menschliches Scrollverhalten, bevor Sie Inhalte extrahieren.
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.3)")
time.sleep(random.uniform(0.8, 2.0))
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.7)")
time.sleep(random.uniform(0.5, 1.5))
8. CAPTCHAs automatisch bearbeiten
CAPTCHAs sind eine Hürde, aber kein Hindernis, doch die manuelle Lösung ist nicht skalierbar. Für das Scraping in der Produktion benötigen Sie eine automatisierte CAPTCHA-Verarbeitung. Eine Übersicht über die besten CAPTCHA-Löser für das Web-Scraping hilft Ihnen bei der Auswahl des richtigen Tools für Ihren Anwendungsfall.
Die wichtigsten Ansätze:
- Lösungsdienste von Drittanbietern (2captcha, Anti-Captcha): Senden Sie das CAPTCHA-Bild oder den Website-Schlüssel an menschliche Löser oder KI-Modelle, empfangen Sie das Token und fügen Sie es in das Formular ein.
- reCAPTCHA v3-Score-Management: reCAPTCHA v3 läuft im Hintergrund und weist einen Risikowert zu. Je höher Ihr Score ist, desto weniger wahrscheinlich ist es, dass Sie eine Herausforderung sehen. Eine gute Session-Hygiene (realistische Header, Timing, Browsing-Verlauf) sorgt also für einen hohen Score.
- Verwaltete Lösungen: Der Web Unlocker von Bright Data enthält einen integrierten CAPTCHA-Löser, der reCAPTCHA, hCaptcha und Cloudflare Turnstile transparent und ohne Integration verarbeitet.
import requests
# Mit Bright Data Web Unlocker wird die CAPTCHA-Lösung automatisch durchgeführt,
# bevor die Antwort zurückgegeben wird. Es ist keine Solver-Integration erforderlich.
response = requests.get(
"https://target-site.com/product-page",
proxies={
"https": "https://username:[email protected]:33335"
},
verify=False # Web Unlocker verwendet sein eigenes SSL-Zertifikat
)
print(response.status_code) # Gibt 200 mit vollständig gerendertem Inhalt zurück
9. Honeypot-Fallen vermeiden
Honeypot-Links sind für echte Benutzer unsichtbar, aber im rohen HTML-Code sichtbar. Das Folgen dieser Links ist ein sofortiges Bot-Signal.
Erkennen Sie sie, bevor Sie Links folgen, indem Sie die CSS-Sichtbarkeit überprüfen:
from bs4 import BeautifulSoup
def is_visible(tag):
"""Gibt False zurück, wenn das Element über CSS ausgeblendet ist."""
style = tag.get("style", "")
if "display:none" in style.replace(" ", "") or
"visibility:hidden" in style.replace(" ", ""):
return False
# Überprüfen Sie auch auf gängige Honeypot-Klassennamen.
classes = tag.get("class", [])
honeypot_classes = {"hidden", "invisible", "honeypot", "trap"}
if honeypot_classes.intersection(set(classes)):
return False
return True
soup = BeautifulSoup(html_content, "html.parser")
safe_links = [
a["href"] for a in soup.find_all("a", href=True)
if is_visible(a)
]
Dies erfasst nicht alle Honeypots, da einige durch externe CSS-Klassen statt durch Inline-Stile versteckt sind. Die Methode page.is_visible() von Playwright ist zuverlässiger, da sie den berechneten CSS-Stil statt nur Inline-Attribute auswertet.
10. Umgang mit Ratenbegrenzung durch exponentielles Backoff
Bei HTTP 429-Antworten (Too Many Requests) ist ein sofortiger erneuter Versuch kontraproduktiv – er beschleunigt die Sperrung. Implementieren Sie einen exponentiellen Backoff, um sich elegant zurückzuziehen und das Scraping fortzusetzen, ohne eine härtere Sperre auszulösen:
import time
import random
import requests
def fetch_with_backoff(url, headers, proxies, max_retries=5):
"""Wiederholen Sie den Versuch mit exponentiellem Backoff bei Antworten mit Ratenbegrenzung."""
for attempt in range(max_retries):
response = requests.get(url, headers=headers, proxies=proxies, timeout=15)
if response.status_code == 200:
return response
elif response.status_code == 429:
# Respect Retry-After header if present
retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
print(f"Rate limited. Warten auf {retry_after}s (Versuch {attempt + 1})")
time.sleep(retry_after)
elif response.status_code in (403, 503):
# Wahrscheinlich blockiert, IP rotieren und zurückziehen
print(f"Blockiert (HTTP {response.status_code}). Zurückziehen...")
time.sleep(2 ** attempt + random.uniform(0, 1))
else:
response.raise_for_status()
raise Exception(f"Maximale Anzahl von Wiederholungsversuchen für {url} überschritten")
11. Geografischen Kontext anpassen
Viele Websites bieten unterschiedliche Inhalte an oder wenden strengere Bot-Erkennungsmaßnahmen an, die auf dem geografischen Ursprung der Anfragen basieren. Ein Produktpreis-Scraper, der auf eine US-amerikanische E-Commerce-Website abzielt, sollte Anfragen über US-amerikanische Residential-IPs weiterleiten, nicht über deutsche oder singapurische. Eine nicht übereinstimmende Geografie führt zu einer Inkonsistenz zwischen dem Ursprung der Anfrage und den Accept-Language- oder Locale-Headern, was von Verhaltensanalysesystemen gemeldet werden kann.
Das Proxy-Netzwerk von Bright Data unterstützt die Ausrichtung nach Land, Bundesstaat, Stadt und Netzbetreiber, sodass Ihre Anfragen aus genau dem geografischen Kontext stammen, den die Zielwebsite erwartet. Sie können alle verfügbaren Proxy-IP-Standorte erkunden, bevor Sie Ihre Geo-Targeting-Strategie entwickeln.
12. Nutzen Sie zugrunde liegende APIs
Bevor Sie einen komplexen Scraper erstellen, überprüfen Sie, ob die Zielwebsite eine interne API bereitstellt, die von ihrem Frontend genutzt wird. Öffnen Sie die Entwicklertools Ihres Browsers, gehen Sie zur Registerkarte „Netzwerk“ und beobachten Sie die XHR/Fetch-Anfragen, während Sie auf der Website navigieren. Viele Websites, darunter auch große E-Commerce-Plattformen, laden ihre Daten von JSON-Endpunkten, die viel einfacher direkt aufzurufen sind als HTML zu parsen.
Diese internen APIs haben oft strukturierte JSON-Antworten (kein HTML-Parsing erforderlich), eine geringere Anti-Bot-Kontrolle als die gerenderte Hauptseite und Paginierungsparameter, die sich leicht automatisieren lassen.
Der Nachteil: Interne APIs sind undokumentiert, können ohne Vorankündigung geändert werden und erfordern möglicherweise Authentifizierungstoken, die über die Hauptwebsite bezogen werden müssen. Wenn sie jedoch verfügbar und stabil sind, sind sie der effizienteste Weg zum Scraping.
Der schnellste Weg: Verwenden Sie eine API für Web-Scraping
Alle 12 oben genannten Techniken erfordern eine individuelle Implementierung, Wartung und kontinuierliche Anpassung, da sich Anti-Bot-Systeme weiterentwickeln. In großem Maßstab wird die Verwaltung dieses Stacks zur eigentlichen Aufgabe.
Die Alternative: Konsolidieren Sie den gesamten Stack in einem einzigen API-Aufruf.
Bright Data Web Unlocker
Web Unlocker ist ein KI-gestütztes Proxy-Gateway, das automatisch die IP-Rotation, den TLS-Fingerabdruckabgleich, die CAPTCHA-Lösung und das Browser-Rendering basierend auf den Anforderungen der Zielwebsite übernimmt. Sie stellen eine Standard-HTTP-Anfrage. Web Unlocker entscheidet, welcher Proxy-Typ verwendet werden soll, welcher Fingerabdruck präsentiert werden soll, ob ein CAPTCHA gelöst werden soll und ob JavaScript gerendert werden soll, und gibt dann saubere Inhalte zurück, unabhängig von der Komplexität der Anti-Bot-Maßnahmen der Website.
import requests
response = requests.get(
"https://any-protected-site.com/data",
proxies={"https": "https://user:[email protected]:33335"},
verify=False,)
# Gibt vollständig gerenderte, entsperrte Inhalte zurück.
print(response.text)
Web Unlocker wird getestet und kontinuierlich für Cloudflare, Akamai, DataDome und PerimeterX aktualisiert. Ein API-Aufruf ersetzt 10 manuelle Techniken.
Bright Data Scraping-Browser
Für Websites, die eine vollständige Browser-Interaktion erfordern, einschließlich mehrstufiger Abläufe, Anmeldesequenzen und JavaScript-lastiger SPAs, bietet der Scraping-Browser eine vorab gehärtete Chromium-Instanz, auf die über CDP zugegriffen werden kann. Er lässt sich direkt in Playwright und Puppeteer integrieren und besteht die Fingerprinting-Prüfungen von Cloudflare Turnstile und Akamai Bot Manager ohne jegliche Plugin-Konfiguration.
from playwright.sync_api import sync_playwright
SBR_WS_CDP = "wss://brd-customer-XXXX:[email protected]:9222"
with sync_playwright() as pw:
browser = pw.chromium.connect_over_cdp(SBR_WS_CDP)
page = browser.new_page()
page.goto("https://cloudflare-protected-site.com")
print(page.inner_text("body"))
browser.close()
Bright Data Scraper-APIs
Für Teams, die strukturierte Daten von bestimmten Plattformen benötigen, ohne eine Scraping-Infrastruktur schreiben oder warten zu müssen, bieten die Scraper-APIs von Bright Data eine Bibliothek mit über 120 vorgefertigten Scrapern für die beliebtesten Domains: Amazon, LinkedIn, Instagram, Zillow, Indeed, TikTok, Walmart, Booking.com, Glassdoor und mehr.
Jeder Scraper akzeptiert eine URL- oder Stichwort-Eingabe, übernimmt intern die gesamte Entsperrung und Darstellung und gibt sauber strukturierte Daten in JSON oder CSV zurück. Es ist keine Proxy-Verwaltung, keine Parser-Wartung und keine Fingerabdruck-Optimierung erforderlich. Sie zahlen nur für erfolgreich gelieferte Datensätze.
# Beispiel: Auslösen eines Amazon-Produkt-Scrapes über die Scraper-APIs
curl -H "Authorization: Bearer API_TOKEN"
-H "Content-Type: application/json"
-d '[{"url":"https://www.amazon.com/dp/B0CRMZHDG8","asin":"B0CRMZHDG8","zipcode":"94107"}]'
„https://api.brightdata.com/datensätze/v3/trigger?dataset_id=gd_l7q7dkf244hwjntr0&format=json”
Spezielle Scraper sind für E-Commerce-Plattformen, LinkedIn und Social-Media-Kanäle verfügbar, wobei die Ergebnisse über Webhook, API-Polling oder direkten Download bereitgestellt werden können. Für Domains, die noch nicht abgedeckt sind, können Sie mit Scraper Studio einen benutzerdefinierten Scraper mithilfe von KI erstellen, ohne dass Infrastrukturarbeiten erforderlich sind.
Bright Data Residential-Proxys
Für Szenarien, in denen Sie Ihre eigene Scraping-Infrastruktur verwalten, aber einen zuverlässigen, großen IP-Pool benötigen: Das Residential-Proxy-Netzwerk von Bright Data umfasst mehr als 150 Millionen IPs in über 195 Ländern mit granularer geografischer Ausrichtung bis auf Stadt- und Netzbetreiberebene. Es umfasst mehr als 7 Millionen mobile IPs für den Traffic von Mobilfunkbetreibern und ISP-Proxys für statische Residential-IPs mit hohen Vertrauenswerten.
Anti-Bot-Systeme: Was Sie erwartet
Cloudflare
Cloudflare Bot Management ist das am weitesten verbreitete Anti-Bot-System, das Millionen von Websites schützt, darunter die meisten großen E-Commerce- und Medienangebote. Es arbeitet in mehreren Ebenen: JavaScript-Challenges (einschließlich Turnstile), IP-Reputationsbewertung, TLS/JA4-Fingerprinting und Verhaltensanalyse. Das cf_clearance-Cookie von Cloudflare kann, sobald es durch das Bestehen einer Herausforderung in einem echten Browser erhalten wurde, innerhalb seiner TTL wiederverwendet werden. Die Erkennung stützt sich stark auf die Offenlegung von navigator.webdriver, inkonsistente Header-Sets und Nicht-Browser-JA4-Hashes. Eine vollständige technische Anleitung zu den Methoden, die funktionieren, finden Sie in unserem Leitfaden zum Umgehen von Cloudflare.
Akamai Bot Manager
Akamai sammelt clientseitige Sensordaten (Canvas, Schriftarten, Zeitzone, WebGL) über injiziertes JavaScript und validiert diese serverseitig anhand des abck-Cookie-Tokens. Es gleicht TLS/JA3-Fingerabdrücke und Sitzungstoken gleichzeitig ab, sodass es nicht ausreicht, nur eine Ebene zu korrigieren. Akamai ist häufig auf Websites von Unternehmen aus den Bereichen Einzelhandel, Luftfahrt und Finanzen zu finden. Allein nicht übereinstimmende Verschlüsselungssuiten können eine Soft-Blockierung oder einen 403-Fehler auslösen.
DataDome
DataDome schützt mit Echtzeit-ML-basiertem Scoring sowohl vor Scraping-Browsern als auch vor API-Scraping. Es validiert IP-ASN, Anforderungsrhythmus, Header-Entropie und clientseitige JavaScript-Signale gemeinsam. Bei fehlgeschlagenen Validierungen wird eine eindeutige Seite mit der Meldung „Zugriff verweigert. Powered by DataDome.“ angezeigt. Eine vollständige Browser-Automatisierung mit mobilen Residential-IPs und persistenten Sitzungen schneidet gegenüber DataDome deutlich besser ab als reine HTTP-Clients.
PerimeterX / HUMAN
PerimeterX (jetzt HUMAN Security) ist auf Verhaltensanalysen spezialisiert und verfolgt Mausbewegungen, Tastenanschläge, Scrolltiefe, Fokus-/Unschärfeereignisse und Timing während einer gesamten Sitzung, um einen Verhaltensfingerabdruck zu erstellen. Es vergleicht Sitzungen mit menschlichen Basiswerten und weist Bot-Scores zu. Bemerkenswert ist, dass es eine verzögerte Durchsetzungsstrategie verwendet, die es verdächtigen Bots ermöglicht, frei zu surfen, während Verhaltensbeweise gesammelt werden, bevor sie blockiert werden. Das bedeutet, dass Ihre ersten paar Anfragen erfolgreich sein können, bevor eine Blockierung ausgelöst wird.
Vergleich: Blockierungsmechanismen und Gegenmaßnahmen
| Blockierungsmechanismus | Empfohlene Technik | Bright Data-Lösung |
|---|---|---|
| IP-Sperre/Ratenbegrenzung | IPs mit Proxys rotieren | Residential-Proxys (über 150 Millionen IPs) |
| Erkennung von Rechenzentrums-IPs | Verwendung von Residential-Proxys oder Mobile-Proxys | ISP-Proxys, Mobile-Proxys |
| TLS-Fingerprinting | curl_cffi mit Browser-Identitätswechsel |
Web Unlocker (automatischer TLS-Abgleich) |
| Browser-Fingerprinting | Headless-Browser + Stealth-Plugins | Scraping-Browser (integrierte Stealth-Funktion) |
| CAPTCHA-Herausforderungen | Automatischer CAPTCHA-Löser | Web Unlocker (integrierter Solver) |
| Verhaltensanalyse | Zufällige Zeitsteuerung + Simulation menschlicher Handlungen | Scraping-Browser (menschenähnliches Verhalten) |
| Honeypot-Fallen | Versteckte Links überspringen | Scraping-Browser (intelligente Navigation) |
| JavaScript-Herausforderungen | Vollständige Browser-Rendering | Scraping-Browser, Web Unlocker |
| Geoblocking | Geografisch ausgerichtete Proxys | Ausrichtung auf über 195 Länder |
| Ratenbegrenzung | Exponentielles Backoff | Web Unlocker (verwaltete Ratenbegrenzung) |
Zusammenfassung
Es gibt keine einzelne Technik, mit der sich alle Anti-Bot-Systeme umgehen lassen. Moderne Erkennungssysteme basieren auf mehreren Ebenen, darunter IP-Reputation, TLS-Fingerprinting, Browser-Fingerprinting und Verhaltensanalyse. Um sie zu umgehen, müssen alle Ebenen gleichzeitig überwunden werden.
Für die Entwicklung und das Scraping mit geringem Volumen: Beginnen Sie mit Residential-Proxys, realistischen Headern, curl_cffi für die TLS-Fingerprint-Verwaltung und Playwright mit playwright-stealth für JavaScript-lastige Websites.
Für Scraping im Produktionsmaßstab: Die Komplexität der manuellen Pflege all dieser Ebenen, einschließlich der Rotation von Fingerabdrücken, der Aktualisierung von Stealth-Plugins, der Verwaltung von Proxy-Pools und der Integration von CAPTCHA-Lösern, ist erheblich. Die Lösungen von Bright Data konsolidieren IP-Rotation, TLS-Fingerabdruck-Management, CAPTCHA-Lösung und Browser-Rendering in einem einzigen API-Aufruf. So können Sie sich auf die Daten konzentrieren, nicht auf die Infrastruktur.
Häufig gestellte Fragen
Kann eine Website erkennen, ob Sie Scraping betreiben?
Ja. Websites erkennen Scraper anhand der IP-Reputation, der HTTP-Header-Analyse, des TLS-Fingerprintings, des Browser-Fingerprintings, von CAPTCHA-Herausforderungen und der Verhaltensanalyse. Die meisten Erkennungen erfolgen in Millisekunden, bevor der Seiteninhalt angezeigt wird.
Warum werden Web-Scraper blockiert?
Scraper werden blockiert, wenn sie zu viele Anfragen von einer IP-Adresse stellen, nicht-menschliche HTTP-Header senden, TLS- oder Browser-Fingerabdruck-Prüfungen nicht bestehen oder CAPTCHA-Herausforderungen auslösen. Residential-Proxys und Stealth-Browser reduzieren all diese Risiken.
Was ist der beste Weg, um zu scrapen, ohne blockiert zu werden?
Der zuverlässigste Ansatz kombiniert rotierende Residential-Proxys, realistische Anfrage-Header, zufällige Zeitverzögerungen und einen Headless Browser mit Stealth-Plugins. Für Scraping im Produktionsmaßstab übernimmt eine verwaltete Lösung wie Bright Data’s Web Unlocker all dies automatisch und konsolidiert IP-Rotation, TLS-Fingerabdruck-Management, CAPTCHA-Lösung und Browser-Rendering in einem einzigen API-Aufruf.
Ist Web-Scraping legal?
Das Web-Scraping öffentlich zugänglicher Daten ist in den meisten Rechtsordnungen generell legal, insbesondere bei nicht personenbezogenen, nicht urheberrechtlich geschützten Daten. Überprüfen Sie immer die robots.txt-Datei und die Nutzungsbedingungen der Zielwebsite. Das Scraping personenbezogener Daten kann durch die DSGVO, den CCPA und ähnliche Gesetze eingeschränkt sein. In den USA hat das Urteil hiQ v. LinkedIn bestätigt, dass das Scraping öffentlicher Daten nicht gegen den Computer Fraud and Abuse Act verstößt.
Was ist TLS-Fingerprinting?
TLS-Fingerprinting identifiziert den Typ des Clients (Browser, Bot oder Skript) durch Analyse der einzigartigen Kombination aus Verschlüsselungssuiten, TLS-Version und Erweiterungen, die während des HTTPS-Handshakes verwendet werden. Anti-Bot-Systeme verwenden JA3- und JA4-Hashes, um bekannte Scraping-Tools wie die Python-Bibliothek „requests“ zu blockieren. Die wichtigste Konsequenz: Selbst vollkommen realistische HTTP-Header helfen nicht, wenn Ihr TLS-Stack eher wie OpenSSL als wie Chrome aussieht.
Warum funktionieren Residential-Proxys besser als Datacenter-Proxies?
Residential-Proxys leiten den Traffic über echte, vom ISP zugewiesene IP-Adressen weiter. Anti-Bot-Systeme überprüfen die ASN (Autonomous System Number) jeder eingehenden IP. Rechenzentrums-IPs gehören zu bekannten ASNs (AWS, GCP usw.), die auf Hochsicherheits-Websites standardmäßig blockiert werden. Residential-IPs gehören zu ISPs wie Comcast oder BT, wodurch sie auf der Netzwerkebene nicht vom echten Benutzer-Traffic zu unterscheiden sind. Eine vollständige Aufschlüsselung der Leistungsunterschiede finden Sie in unserem Vergleich zwischen Datacenter-Proxys und Residential-Proxys.