Scarnox · Blog

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:

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:

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:

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

Nächste Schritte