Cloudflare-geschützte Seiten scrapen (Leitfaden 2026)
Cloudflare steht vor einem großen Teil des öffentlichen Webs, daher stößt ein Scraper, der auf einer Seite funktioniert, auf der nächsten oft auf eine Wand. Du bemerkst das meist an einem HTTP 403 oder 503, an einer Zwischenseite mit "Just a moment..." oder an einem Turnstile-Kästchen auf der Seite. Dieser Leitfaden erklärt, was Cloudflare prüft, welche Lösungen funktionieren, ohne an Dinge zu rühren, die du nicht anfassen solltest, und wo das Lösen von Captchas hineinpasst. Die kurze Antwort: Prüfe, ob du die Seite scrapen darfst, werde langsamer, sende Anfragen, die wie ein normaler Client aussehen, verwende einen echten Browser, wenn die Seite JavaScript braucht, und kümmere dich erst dann um ein Captcha. Turnstile ist das Captcha, das Cloudflare am häufigsten einsetzt. Die Unterstützung von Turnstile bei Scarnox ist demnächst verfügbar. Der heute live verfügbare Captcha-Typ ist PopularCaptcha.
Was Cloudflare prüft
Cloudflare bewertet jede Anfrage anhand mehrerer Signale:
- IP-Reputation. Adressen aus Cloud-Rechenzentren starten mit einem niedrigeren Score als Adressen aus Heimanschlüssen.
- Anfragerate und Muster. Hunderte Anfragen pro Sekunde von einer Adresse wirken wie ein Bot, egal, was die Header sagen.
- Header und TLS-Fingerabdruck. Eine nackte HTTP-Bibliothek sendet oft Header, eine Header-Reihenfolge und einen TLS-Handshake, den kein gängiger Browser sendet.
- JavaScript-Ausführung. Die Challenge-Seite führt Skripte aus und prüft, ob eine echte Browser-Umgebung vorhanden ist.
- Cookies. Nachdem eine Challenge bestanden wurde, stellt Cloudflare ein Freigabe-Cookie aus, das an diese Sitzung gebunden ist.
Ein hoher Score wird stillschweigend durchgelassen. Ein mittlerer Score bekommt eine interaktive Challenge. Ein niedriger Score bekommt eine Sperre. Der größte Teil der Arbeit besteht darin, deinen Score zu verbessern, indem du dich wie ein wohlerzogener Client verhältst, nicht darin, gegen die Prüfung zu kämpfen.
Schritt 1: Prüfen, dass du die Seite scrapen darfst
Bevor du technisch irgendetwas tust, lies die robots.txt der Seite und ihre Nutzungsbedingungen. Eine Blockade ist oft der Betreiber, der dir etwas mitteilt. Öffentliche Seiten langsam und zu einem klaren Zweck zu scrapen ist eine Sache. Eine Blockade zu überwinden, um an Daten zu kommen, die der Betreiber eingeschränkt hat, ist eine andere, und dafür unterstützt Scarnox keine Nutzung. Der rechtliche Überblick behandelt die allgemeinen Fragen.
Schritt 2: Die einfache Anfrage richtig machen
Viele Scraper, die als "blockiert" gelten, senden einfach schlechte Anfragen. Behebe diese Punkte zuerst:
- Sende einen aktuellen User-Agent und die Header, die ein Browser senden würde, etwa
AcceptundAccept-Language. - Verwende ein einziges Session-Objekt, damit Cookies zwischen Anfragen erhalten bleiben, wie es ein Browser täte.
- Füge eine Verzögerung zwischen den Anfragen hinzu, mit etwas zufälligem Jitter.
- Gehe bei Antworten
429und503zurück, statt in einer engen Schleife erneut zu versuchen.
import random
import time
import requests
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
})
def polite_get(url: str, attempts: int = 4) -> requests.Response:
r = None
for attempt in range(attempts):
r = session.get(url, timeout=30)
if r.status_code not in (429, 503):
return r
# Exponentielles Zurückschalten mit Jitter: etwa 1, 2, 4 Sekunden plus Zufall.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Wenn dich das durchlässt, bist du fertig. Behalte die Verzögerung bei.
Schritt 3: Herausfinden, mit welcher Challenge du es zu tun hast
Die Antwort verrät dir viel:
- Eine Seite "Just a moment...". Das ist eine JavaScript-Challenge. Ein echter Browser besteht sie meist nach wenigen Sekunden von selbst. Das Freigabe-Cookie kann danach für spätere Anfragen in derselben Sitzung wiederverwendet werden.
- Ein Turnstile-Widget auf einem Formular oder einer Seite. Das ist ein Captcha. Es braucht ein Token vom Widget, bevor das Formular eine Übermittlung akzeptiert.
- Eine Blockseite mit einem Fehlercode. Die Adresse oder die Anfrage wurde rundheraus abgelehnt. Das Anpassen deines Tempos und das Korrigieren deiner Anfragen hilft meist mehr als alles andere. Lösen macht aus einer harten Sperre keine Daten.
Wenn du prüfst, welche davon du siehst, sparst du viel vergebene Mühe.
Schritt 4: Einen echten Browser verwenden, wenn die Seite ihn braucht
Wenn die Seite Inhalte erst nach dem Ausführen von JavaScript zeigt, sieht ein reiner HTTP-Client sie nie. Steuere stattdessen einen vollständigen Browser mit Playwright oder Selenium. Ein Headless-Browser ist erkennbar, lies daher Headless-Browser-Erkennung, bevor du dich darauf verlässt, und stelle ihn so ein, dass er zu der Umgebung passt, die ein echter Besucher hätte. Der Leitfaden zu JavaScript-Websites zeigt ein vollständiges Beispiel.
Schritt 5: Die IP-Reputation prüfen
Adressen aus Cloud-Rechenzentren sind der häufigste Grund, warum eine saubere Anfrage einen niedrigen Score bekommt. Residential-Adressen werden meist besser bewertet, dafür sind sie bei Geschwindigkeit und Kosten teurer. Den Kompromiss erklärt Residential- vs. Datacenter-Proxys.
Rotation hat eigene Fallen. Die Adresse bei jeder Anfrage zu wechseln wirkt unnatürlich, denn ein echter Besucher behält eine Adresse für einen ganzen Besuch. Stabile Sitzungen, bei denen eine Adresse für eine Reihe zusammenhängender Anfragen gehalten wird, funktionieren oft besser als schnelle Rotation. Rotierende Proxys fürs Scraping geht ins Detail.
Schritt 6: Wo die Captcha-Lösung hineinpasst
Manchmal erscheint das Widget tatsächlich, etwa auf einem Formular, das du testest, oder auf einer Seite, für die du die Erlaubnis hast, sie zu automatisieren. Ein Turnstile-Token ist dann ein Pflichtschritt in diesem Ablauf. Die Unterstützung von Turnstile bei Scarnox kommt demnächst, baue deshalb noch keinen Produktivcode darauf. Der heute live verfügbare Captcha-Typ ist PopularCaptcha, das ein anderes Widget verwendet.
Der allgemeine Ablauf für jedes token-basierte Captcha ist derselbe. Du liest den Sitekey von der Seite, forderst ein Token an und legst das Token in das Formularfeld, das die Seite erwartet. Tokens sind kurzlebig, also sende sie sofort ab. Der PopularCaptcha-Python-Leitfaden zeigt diesen Ablauf von Anfang bis Ende, und Captcha-Typen erklärt vergleicht die Widgets, denen du begegnen wirst.
Wenn du bereit sein willst, sobald die Turnstile-Unterstützung live geht, kannst du jetzt eine kostenlose Testphase starten. Starte mit kostenlosem Testguthaben, ohne Karte: Konto erstellen. Die aktuellen Preise des live verfügbaren Captcha-Typs findest du auf der Preisseite.
Verantwortungsvoll scrapen
- Lies
robots.txtund halte dich an die Nutzungsbedingungen der Seite, die du scrapst. - Begrenze die Rate deines Crawlers und laufe, wo möglich, zu Zeiten außerhalb der Spitzenlast.
- Speichere Antworten zwischen, damit du nie ohne Grund dieselbe Seite zweimal abrufst.
- Vermeide das Erheben personenbezogener Daten, außer du hast dafür eine Rechtsgrundlage.
- Wenn eine Seite den Zugang eingeschränkt hat, hör auf. Versuche nicht, die Einschränkung zu umgehen.