Scrapling einrichten — der Scraper, der sich selbst repariert.
Ein Python-Werkzeug, das sich als echter Browser tarnt und an Cloudflares Bot-Wand vorbeikommt — und das seinen eigenen Code repariert, wenn die Seite ihr Layout umbaut. Open Source, BSD-3, kein Konto und kein Abo. Hier ist die komplette Einrichtung: die Installationszeile, an der die meisten scheitern, der fertige Skill für Claude Code und der Reihenfolge-Trick, ohne den die Selbstheilung still gar nichts tut.
Du hast DATENDIEB kommentiert und den Link per DM bekommen? Genau richtig — das hier ist die komplette Anleitung aus dem Video.
Bevor du startest
Was du brauchst
- Python 3.10 oder neuer. Prüfen mit ‹python3 --version› — steht dort 3.9 oder kleiner, installier vorher eine neuere Version.
- Ein Terminal. Auf dem Mac ist das die App „Terminal“, unter Windows die PowerShell.
- Etwa 1 GB freier Speicherplatz — der zweite Befehl lädt komplette Browser herunter.
- Für Schritt 3 zusätzlich: Claude Code und Node.js (für ‹npx›). Beides optional, Scrapling läuft auch ohne.
Schritt 1 — Installieren, ohne in die Falle zu treten
Das hier ist die Zeile, an der die meisten scheitern. In fast jedem Tutorial steht pip install scrapling — und das ist zwar richtig, aber unvollständig. Dieser Befehl installiert absichtlich nur den Parser, ohne die Fetcher. Du merkst das erst, wenn dein erstes Skript mit ModuleNotFoundError: No module named 'curl_cffi' abbricht.
Nimm stattdessen diese beiden Zeilen:
pip install "scrapling[all]" scrapling install
Die eckigen Klammern sind der ganze Trick. all zieht alles mit: die Fetcher, die Kommandozeilen-Werkzeuge und den MCP-Server. Die Anführungszeichen brauchst du, weil manche Shells die eckigen Klammern sonst selbst interpretieren.
Der zweite Befehl lädt die Browser herunter, mit denen sich Scrapling später tarnt — das dauert ein paar Minuten und braucht Platz auf der Platte. Ohne diesen Schritt funktionieren nur die reinen HTTP-Anfragen, nicht der Stealth-Browser.
Wenn du sparsamer sein willst, geht auch die kleinere Variante: scrapling[fetchers] für die Fetcher allein, scrapling[shell] für den extract-Befehl aus Schritt 2, scrapling[ai] für den MCP-Server. Für den Einstieg ist all der ruhigere Weg, weil dir dann nichts fehlt.
Prüf zum Schluss, ob alles sitzt:
scrapling --version
Kommt hier eine Versionsnummer, bist du durch. Kommt ein Fehler, hat die Installation die Extras nicht mitgenommen — dann nochmal Zeile eins, diesmal mit den Anführungszeichen.
Schritt 2 — Die erste Seite ziehen, ohne eine Zeile Code
Bevor wir Python schreiben, der schnellste Beweis, dass es läuft. Scrapling bringt einen Kommandozeilen-Befehl mit, der dir eine Seite direkt als Datei auf die Platte legt:
scrapling extract get 'https://quotes.toscrape.com/' seite.md
Die Dateiendung entscheidet über das Format: .md gibt dir eine Markdown-Fassung der Seite, .txt nur den reinen Text, .html das rohe HTML.
Interessanter wird es, wenn du nicht die ganze Seite willst, sondern nur einen Ausschnitt. Dafür gibst du einen CSS-Selektor mit — und sagst gleich dazu, als welcher Browser sich Scrapling ausgeben soll:
scrapling extract get 'https://quotes.toscrape.com/' zitate.txt --css-selector '.quote' --impersonate 'chrome'
Das --impersonate ist der Tarnungs-Teil aus dem Video in seiner einfachsten Form: Scrapling ahmt den TLS-Fingerabdruck und die Header eines echten Chrome nach, statt sich als Python-Skript zu erkennen zu geben.
Braucht die Seite JavaScript, tauschst du get gegen fetch — dann läuft ein echter Browser dahinter. Und für die harten Fälle gibt es stealthy-fetch, um das es in Schritt 5 geht.
Schritt 3 — Der fertige Skill für Claude Code
Hier wird es bequem. Scrapling bringt seit Kurzem eine fertige Agent-Skill mit — das ist die komplette Doku, als Markdown verpackt, damit dein Agent nichts raten muss. Der Autor sagt, sie deckt rund 90 Prozent aller Scrapling-Fragen ab.
Ein Befehl, und Claude Code kennt die ganze Bibliothek:
npx skills add D4Vinci/Scrapling --skill scrapling-official
npx skills erkennt selbst, welche Agenten bei dir installiert sind, und hängt den Skill dort ein. Danach redest du einfach normal mit deinem Agenten:
Zieh mir von https://quotes.toscrape.com/ alle Zitate mit Autor und Tags und schreib sie als CSV nach zitate.csv. Nimm dafür Scrapling. Bau es so, dass der Scraper einen Layout-Umbau der Seite übersteht — also mit auto_save beim ersten Lauf und adaptive danach.
Der Unterschied zu vorher: Ohne den Skill rät Claude bei Scrapling-Code, weil die Bibliothek jung ist und sich schnell bewegt — du bekommst Funktionsnamen, die es nie gab. Mit Skill schreibt er aktuellen Code gegen die echte API.
Wenn du lieber den MCP-Server willst statt des Skills, geht das auch. Der ist in Scrapling eingebaut, kein Fremd-Plugin, und bringt zehn Werkzeuge mit — darunter stealthy_fetch und screenshot:
which scrapling claude mcp add ScraplingServer "/hier/den/pfad/aus/der/zeile/darueber/einsetzen" mcp
Der which-Befehl sagt dir, wo Scrapling in deiner Umgebung liegt — diesen Pfad setzt du in die zweite Zeile ein. Beides gleichzeitig brauchst du nicht; der Skill ist der einfachere Weg, der MCP-Server der mächtigere.
Schritt 4 — Selbstheilung: der Reihenfolge-Trick
Das ist der Teil aus dem Video, der die eigentliche Arbeit spart — und der Teil, bei dem du still auf die Nase fällst, wenn die Reihenfolge nicht stimmt.
Die Mechanik in einem Satz: Beim ersten Besuch merkt sich Scrapling, wie deine Daten aussehen. Baut die Seite später ihr Layout um, sucht es alle Elemente der neuen Seite durch und nimmt das, was dem Gemerkten am ähnlichsten ist. Kein KI-Zauber, sondern ein Ähnlichkeits-Score — deterministisch und offline.
Und jetzt die Falle. auto_save wird still ignoriert, wenn du adaptive nicht vorher am Fetcher selbst eingeschaltet hast. Du bekommst keinen Fehler, nur eine Warnung, die im Log untergeht:
Argument auto_save will be ignored because adaptive wasn't enabled on initialization.
Wer die überliest, baut die Selbstheilung ein — und sie tut nichts. Der Scraper läuft, die Daten kommen, alles sieht gut aus. Bis die Seite sich ändert und nichts geheilt wird, weil nie etwas gelernt wurde.
Die richtige Reihenfolge sind drei Zeilen, und die erste ist die entscheidende:
from scrapling.fetchers import Fetcher
Fetcher.adaptive = True # ZUERST — sonst ist alles danach ein No-Op
page = Fetcher.get('https://quotes.toscrape.com/')
# Besuch 1: merkt sich, wie die Elemente aussehen
zitate = page.css('.quote', auto_save=True)
# Besuch 2, nach dem Layout-Umbau: findet sie über den Ähnlichkeits-Score wieder
zitate = page.css('.quote', adaptive=True)Zeile drei ist der ganze Trick. Fetcher.adaptive = True gehört an den Fetcher, bevor du die erste Anfrage stellst — nicht an den css-Aufruf. Das Gleiche gilt für StealthyFetcher.adaptive = True und DynamicFetcher.adaptive = True.
Zwei Fallen daneben, beide beim echten Durchlauf gefunden:
- Kein ::text beim Lernen. Schreibst du page.css('.quote::text', auto_save=True), fliegt dir TypeError: Text nodes do not have attributes um die Ohren. Gemerkt wird das Element, nicht sein Text. Den Text holst du danach aus dem Ergebnis.
- Mehrfach-Treffer werden nur einmal gelernt. Trifft dein Selektor mehrere Elemente, speichert Scrapling nur die Eigenschaften des ersten. Für Listen heißt das: lern lieber den Container und arbeite dich von dort nach unten, statt auf jedes einzelne Element zu zielen.
In der Praxis lässt du beide Argumente einfach dauerhaft stehen — auto_save lernt bei jedem Lauf dazu, adaptive greift nur ein, wenn der Selektor ins Leere läuft.
Schritt 5 — Cloudflares Bot-Wand
Jetzt der Teil, den das Video zeigt. Für Seiten hinter Cloudflare nimmst du nicht den normalen Fetcher, sondern den Stealth-Browser — und schaltest den Löser ausdrücklich ein:
from scrapling.fetchers import StealthySession
with StealthySession(headless=True, solve_cloudflare=True) as session:
page = session.fetch('https://nopecha.com/demo/cloudflare', google_search=False)
daten = page.css('#padded_content a').getall()
print(daten)Dasselbe geht auch aus der Kommandozeile heraus, ganz ohne Python:
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' ergebnis.html --css-selector '#padded_content a' --solve-cloudflare
Der wichtigste Wert hier ist das Timeout. Der Standard liegt bei 30.000 Millisekunden — die Doku verlangt für den Cloudflare-Solver aber mindestens 60 Sekunden. Wenn dein Lauf scheinbar hängt oder ohne Daten zurückkommt, ist das fast immer die Ursache:
from scrapling.fetchers import StealthyFetcher
page = StealthyFetcher.fetch(
'https://nopecha.com/demo/cloudflare',
solve_cloudflare=True,
timeout=60000, # Millisekunden — der Standard von 30000 ist zu knapp
)Und jetzt der ehrliche Teil, den du vor dem ersten Frust wissen solltest: Das klappt oft, nicht immer. Bei meinem Testlauf für das Video liefen drei Cloudflare-geschützte Ziele durch — eins kam sauber mit 200 zurück, zwei antworteten mit 403, obwohl im Log „Cloudflare captcha is solved“ stand. Die Erfolgsmeldung des Lösers ist also kein Beweis dafür, dass du die Daten hast. Prüf immer den Statuscode und den Inhalt, nicht die Log-Zeile.
Für Akamai, DataDome, Kasada und Incapsula ist hier ohnehin Schluss — dafür verweist Scrapling in seinem eigenen README auf einen kostenpflichtigen Fremd-Dienst. Cloudflare ist die Wand, die fällt.
Schritt 6 — Fair bleiben
Zwei Zeilen, die den Unterschied machen zwischen „ich hole mir öffentliche Preise“ und „ich hämmere auf einen fremden Server ein“.
Scrapling kann die robots.txt der Zielseite befolgen — das Flag heißt robots_txt_obey. Schalt es ein, wenn du dir bei einer Seite unsicher bist. Und wenn du mehr als ein paar Seiten ziehst, nimm das Spider-Framework mit AutoThrottle: Es misst die Antwortzeit jeder Domain und regelt seine eigene Verzögerung nach — bei Blocks oder Rate-Limits verdoppelt es die Pause, respektiert Retry-After und wird danach wieder schneller.
Das ist keine Moralpredigt, sondern Selbstschutz: Ein Scraper, der sich benimmt, läuft monatelang. Einer, der es nicht tut, fliegt nach einem Tag raus — und dann hilft dir auch die beste Tarnung nichts mehr.
Erfolgs-Check
Das kannst du danach
- Seiten auslesen, die einen normalen Scraper aussperren — Scrapling tarnt TLS-Fingerabdruck, Browser-Header und Proxys für dich.
- Cloudflares Turnstile- und Interstitial-Challenges automatisch lösen lassen, mit realistisch gesetztem Timeout.
- Deinem Claude Code in normalem Deutsch sagen, welche Seite er auslesen soll — er schreibt aktuellen Scrapling-Code statt geratenem.
- Scraper bauen, die einen Layout-Umbau der Zielseite überleben, weil sie sich beim ersten Besuch gemerkt haben, wie deine Daten aussehen.
Kurz beantwortet
Häufige Fragen
Warum reicht ‹pip install scrapling› nicht?
Weil dieser Befehl absichtlich nur den Parser installiert, ohne die Fetcher. Der erste Import aus ‹scrapling.fetchers› stirbt dann mit ‹ModuleNotFoundError: No module named 'curl_cffi'› — und sogar ‹scrapling --version› bricht ab. Das ist kein Bug, das steht so in der offiziellen Doku, geht aber beim Überfliegen unter. Ich bin selbst reingefallen, als ich für das Video installiert habe. Deshalb steht in Schritt 1 die Variante mit den eckigen Klammern.
Kommt Scrapling wirklich an jedem Bot-Schutz vorbei?
Nein, und wer das behauptet, hat die Doku nicht gelesen. Dokumentiert ist Cloudflare — Turnstile und Interstitial, inklusive der interaktiven und der unsichtbaren Challenges. Für Akamai, DataDome, Kasada und Incapsula verweist das Projekt in seinem eigenen README auf einen Fremd-Dienst, kann die also selbst nicht. Und auch bei Cloudflare gilt: es klappt oft, nicht immer. Bei meinem Test am Drehtag kamen zwei von drei Zielen trotz „solved“-Meldung mit 403 zurück.
Ist die Selbstheilung eine KI?
Nein — und der Autor betont das ausdrücklich. Es ist ein Ähnlichkeits-Score über Element-Eigenschaften: Tag-Name, Text, Attribute, Geschwister-Tags, Pfad und die Eltern-Eigenschaften. Nach einem Umbau bewertet Scrapling alle Elemente der Seite und nimmt das mit dem höchsten Score. Deterministisch, offline, kostenlos, kein API-Key. Genau deshalb funktioniert es auch in fünf Jahren noch gleich.
Wo werden die gelernten Elemente gespeichert?
In einer lokalen SQLite-Datenbank auf deinem Rechner. Der Schlüssel ist Domain plus Identifier — standardmäßig ist der Identifier der Selektor selbst. Nichts davon geht ins Netz.
Der Cloudflare-Löser hängt ewig — kaputt?
Wahrscheinlich nicht, sondern zu kurzes Timeout. Der Standard liegt bei 30.000 Millisekunden, die Doku verlangt für den Cloudflare-Solver aber mindestens 60 Sekunden. Setz ‹timeout=60000› oder höher. Im Video läuft dieser Teil deshalb im Zeitraffer — eine Minute Wartezeit ist realistisch, nicht die Ausnahme.
Ist das eigentlich legal?
Es geht hier um öffentlich einsehbare Daten: Preise, Angebote, Bewertungen, deine eigenen Accounts. Das ist das Framing, und dabei bleibt es. Scrapling hat ein Flag, das die robots.txt der Zielseite befolgt — schalt es ein, wenn du unsicher bist. Was in den Nutzungsbedingungen einer konkreten Seite steht, musst du selbst lesen; ein Werkzeug nimmt dir diese Entscheidung nicht ab.
Brauche ich Claude Code dafür?
Nein. Schritt 1, 2, 4 und 5 laufen ohne. Schritt 3 ist der Komfort-Teil: Statt die API nachzuschlagen, sagst du deinem Agenten in einem Satz, was du willst. Ohne den Skill rät Claude bei Scrapling-Code oft daneben, weil die Bibliothek jung ist und sich schnell bewegt — mit Skill hat er die komplette Doku im Kopf.
Was kostet Scrapling?
Nichts. BSD-3-Lizenz, auch kommerziell frei nutzbar. Kein Konto, kein Limit, kein Abo. Kosten entstehen nur, wenn du zusätzlich bezahlte Proxys oder den erwähnten Fremd-Dienst für andere Anti-Bot-Systeme dazunimmst — beides brauchst du für diesen Guide nicht.
Jedes Video hat sein eigenes Keyword — du findest es im Video und in der Caption. Kommentier es, und die Anleitung landet automatisch in deinen DMs. Kostenlos, ohne Anmeldung.
Folg @ramzi_goessing für tägliche Agent-Demos →