Crawl4AI-Tutorial: Webcrawler für KI-Anwendungen mit Docker

Inhalt
Crawl4AI ist ein Open-Source-Webcrawler für KI-Anwendungen. Er rendert Seiten mit viel JavaScript und liefert sauberes Markdown, bereinigtes HTML, Seitenmetadaten und Links, die ein LLM direkt verarbeiten kann. Außerdem kann er selbst ein LLM aufrufen, um gezielt Informationen zu extrahieren. In diesem Tutorial bauen wir das Docker-Image von Crawl4AI, betreiben es als REST-API-Server und gehen einfache Crawls, die Nutzung aus Python, fortgeschrittene Parameter und die LLM-basierte Extraktion durch.
Moderne LLM-Anwendungen brauchen oft mehr als eine Verbindung zur OpenAI-API. In der Praxis sind aktuelle, spezifische Informationen nötig, die über die Trainingsdaten des Modells hinausgehen. Das ist die Idee hinter Retrieval Augmented Generation (RAG) (auf Englisch).
Denken Sie an einen Bot für Wettbewerbsanalysen, der die Websites der Konkurrenz beobachtet, an einen Rechercheassistenten mit Zugriff auf wissenschaftliche Veröffentlichungen oder an eine E-Commerce-KI, die Preise in mehreren Shops verfolgt. Der Zugriff auf die Daten ist dabei nur die halbe Miete. Sie brauchen die Daten auch in einem Format, das LLMs gut verarbeiten können.
Moderne Websites liefern ihre Inhalte kaum noch als einfaches HTML aus. Sie laden Inhalte per JavaScript nach dem ersten Seitenaufbau nach, einfache HTTP-Anfragen reichen also nicht. Sie brauchen einen Crawler, der JavaScript ausführt und wartet, bis die Inhalte geladen sind, so wie ein echter Browser. In einem Onlineshop erscheinen Produktpreise zum Beispiel oft erst, nachdem JavaScript gelaufen ist, und auf einer Nachrichtenseite laden Artikel vielleicht erst beim Scrollen.
Crawl4AI hat zwei Vorteile, die für KI-Anwendungen zählen. Erstens verarbeitet es dank asynchroner Verarbeitung viele Anfragen gleichzeitig. Wenn Ihre Anwendung Hunderte Seiten schnell analysieren muss, macht diese Nebenläufigkeit bei der Performance viel aus.
Zweitens ist Crawl4AI für die Arbeit mit LLMs gebaut, sowohl beim Format der Ausgabe als auch darin, dass es KI zur Verbesserung der Extraktion nutzen kann. Statt sich mit aufwendiger HTML-Bereinigung oder fragilen Parsing-Regeln herumzuschlagen, bekommen Sie saubere, strukturierte Daten, die direkt in ein LLM gehen können.
Da Crawl4AI Open Source ist, können Sie den Code einsehen, an Ihre Anforderungen anpassen und Ihre Infrastruktur nach Bedarf skalieren, ohne die Grenzen proprietärer Werkzeuge. (Eine weitere Option beschreibt unsere Anleitung zum Crawlen von Websites für LLMs mit Firecrawl (auf Englisch).)
In dieser Anleitung richten wir Crawl4AI mit Docker ein. Die Docker-Variante von Crawl4AI startet einen Webserver, der mehrere Crawl-Anfragen gleichzeitig bearbeitet. Außerdem stellt sie eine REST-API zum Crawlen bereit, die sich in praktisch jede Anwendung einbinden lässt.
Update (November 2026): Der Docker-Server von Crawl4AI hat sich seit
diesem Beitrag stark verändert. Seit
v0.5.0 braucht er eine
Datei .llm.env für die API-Schlüssel, und /crawl erwartet jetzt die
Objekte browser_config und crawler_config und liefert die Ergebnisse
direkt zurück, mit /crawl/stream für Streaming und /crawl/job für
asynchrone Jobs. Die offiziellen Images unterstützen inzwischen amd64 und
arm64, Sie müssen also kein eigenes Image bauen. Der unten beschriebene
Ablauf mit task_id funktioniert nur mit dem Server der Version 0.3.x. Die
aktuelle API finden Sie in der
Self-Hosting-Anleitung.
Das Docker-Image von Crawl4AI bauen
Zum Zeitpunkt des Schreibens ist Crawl4AI bei Version 0.3.73. Die Version hat erst kürzlich die vollständige API und Docker-Unterstützung eingeführt, inklusive offizieller Docker-Container, allerdings nur für arm64-CPUs.
Da Sie Crawl4AI sehr wahrscheinlich auf einem x86-Server betreiben wollen, müssen wir das Image selbst bauen.
Hinweis: Ein Blick auf den offiziellen Docker Hub lohnt sich, dort könnten neue Images liegen. Ich gehe davon aus, dass es bald x86-Images gibt. Dann können Sie diese ganze Vorbereitung überspringen.
-
Klonen Sie das Repository auf Ihren Rechner:
-
Wechseln Sie in das geklonte Repository:
-
Öffnen Sie die Datei
main.pyund entfernen Sie diese Zeile:Diese Zeile bindet die Dokumentation von Crawl4AI ein und liefert sie über den Webserver aus. Wir brauchen sie nicht, und sie würde einen zweiten Build-Schritt erfordern, den wir vorerst vermeiden wollen.
Hinweis: Das kann sich künftig ändern. Wenn Sie die Zeile nicht finden, ist das kein Problem. Machen Sie einfach mit den nächsten Schritten weiter.
-
Bauen Sie jetzt mit diesem Befehl das Docker-Image:
Hinweis: Statt
INSTALL_TYPEaufallzu setzen, können Sie auchbasicverwenden. Die volle Version brauchen Sie für die KI-gestützte Extraktion. Wenn Sie nur crawlen wollen, ohne KI-Extraktion, reicht die Basisversion.
So nutzen Sie die API von Crawl4AI
Das Docker-Image ist gebaut. Jetzt starten wir es und sehen uns an, wie man es benutzt.
-
OPENAI_API_KEY: Ihr OpenAI-API-Schlüssel. Wir brauchen ihn später für die KI-Extraktion. -
MAX_CONCURRENT_TASKS: die maximale Zahl gleichzeitiger Aufgaben, die der Crawler bearbeitet. Passen Sie den Wert an die Leistung Ihres Servers an.
Mehr brauchen wir nicht, um Crawl4AI zu betreiben. Die Beispiele unten
verwenden einfache curl-Befehle, Sie können aber jeden REST-Client nutzen.
Ein einfacher Web-Crawl
Zuerst ein einfacher Crawl:
Das Ergebnis sieht so aus:
Wir bekommen das Crawl-Ergebnis nicht direkt, weil Crawl4AI asynchron crawlt. (Die asynchrone Verarbeitung vieler Anfragen gehört zu seinen besten Funktionen.) Zurück kommt die ID der Crawl-Aufgabe.
Jetzt müssen wir warten, bis der Crawl fertig ist. Dazu rufen wir wiederholt diesen Endpunkt auf:
Die Antwort ist ein riesiges JSON-Objekt, uns interessiert aber vor allem
das Feld status.
Um bei curl und Bash zu bleiben, lesen wir den Status mit jq aus:
Sobald der Status completed ist, ist die Aufgabe erledigt, und die Antwort enthält auch die Crawl-Ergebnisse. Ein weiterer API-Aufruf ist nicht nötig.
Die Ergebnisse stehen im Feld result, das vier interessante Eigenschaften
hat:
-
result.cleaned_htmlenthält eine bereinigte HTML-Version der Seite: -
result.markdownenthält eine Markdown-Version der Seite. Für die meisten KI-Anwendungsfälle ist das das bessere Format, denn die HTML-Tags aus der vorigen Variante brauchen Sie meist nicht. -
result.metadataenthält die Metadaten aus dem Seitenkopf, etwa Titel, Seitenbeschreibung oderog:image.Das Ergebnis sieht so aus:
-
result.linksist besonders interessant, denn Crawl4AI kann einiges mit Links anfangen. Vor allem extrahiert es alle internen und externen Links der Seite und ordnet sie entsprechend zu. Die Linkanalyse sprengt den Rahmen dieses Beitrags, Crawl4AI hat dazu aber eine gute Anleitung in der Dokumentation.
Die API von Crawl4AI aus Python nutzen
Der Vollständigkeit halber zeigen wir hier, wie Sie die Anfragen von oben in Python mit der Bibliothek requests stellen:
Fortgeschrittene Parameter der Crawl4AI-API
Einen einfachen Crawl zu starten ist leicht, es gibt aber eine Reihe von Parametern, die Sie setzen können:
Die meisten dieser Parameter erklären sich selbst, die letzten beiden brauchen aber eine Erklärung. Mit der Session-Verwaltung von Crawl4AI behalten Sie den Zustand über mehrere Anfragen hinweg und können komplexe Crawls über mehrere Seiten abwickeln, was besonders bei dynamischen Websites hilft.
Mehr dazu auf diesen beiden Seiten der Dokumentation:
Daten mit der LLM-Extraktion von Crawl4AI auslesen
Bisher haben wir einfache Crawls ausgeführt. Jetzt nutzen wir die KI-Extraktion von Crawl4AI.
Angenommen, wir wollen Websites crawlen und dabei ganz bestimmte Informationen finden, etwa wem ein Unternehmen gehört.
Kurz bevor es weitergeht ...
Sie möchten zuverlässige KI-Agenten-Systeme bauen?
Wir haben auf Basis aktueller Forschung einen ausführlichen Leitfaden (auf Englisch) erstellt, wie Sie robuste KI-Agenten-Systeme bauen, die auch im produktiven Betrieb funktionieren. Der Leitfaden behandelt:
- die 14 systematischen Fehlerquellen in Multi-Agenten-Systemen
- belegte Best Practices für das Design von Agenten
- strukturierte Kommunikationsprotokolle und Prüfmechanismen
Mit der folgenden Anfrage ruft Crawl4AI ein LLM auf, das diese Information automatisch extrahiert:
Die extrahierten Ergebnisse stehen im Feld result.extracted_content. Es ist
JSON-kodiert, deshalb dekodieren wir es mit dem fromjson-Filter von jq:
Das LLM hat beide Eigentümer des Unternehmens richtig zurückgegeben, und die ganze Pipeline lief mit nur zwei API-Aufrufen.
Hinweis: Zum Zeitpunkt des Schreibens scheinen die Parameter zwischengespeichert zu werden, wenn Sie mehrmals einen Crawl für dieselbe URL anlegen. Rufen Sie dieselbe URL zweimal mit unterschiedlichen Extraktionsanweisungen auf, bekommen Sie die zwischengespeicherte Extraktion. Denken Sie daran.
Andere LLM-Provider mit Crawl4AI verwenden
Wenn Sie einen anderen LLM-Provider wie Azure OpenAI verwenden wollen, hilft
die Provider-Dokumentation
von liteLLM, denn Crawl4AI nutzt intern liteLLM. Crawl4AI reicht api_token
als API-Schlüssel an liteLLM weiter, setzen Sie also Ihren
Azure-OpenAI-Schlüssel ein. liteLLM braucht außerdem Ihren Endpunkt und die API-Version,
die Sie beim Start des Containers über die Umgebungsvariablen
AZURE_API_BASE und AZURE_API_VERSION setzen. Der Teil nach azure/ ist
der Name Ihres Deployments.
Eine Beispielanfrage mit Azure OpenAI:
Dieselbe Art der LLM-Extraktion funktioniert auch mit PDFs und gescannten Dokumenten. Wie das mit einem Open-Source-Vision-Modell geht, zeigen wir in Dokumentenextraktion mit LLMs: Daten aus PDFs per KI auslesen.
Wenn Sie Webinhalte oder Dokumente für eine KI-Anwendung in Ihrem Unternehmen aufbereiten wollen, unterstützen wir Sie gern.



