Trafilatura: HTML aus dem Netz in Text und Metadaten verwandeln
Python & Command-line tool to gather text and metadata on the Web: Crawling, scraping, extraction, output as CSV, JSON, HTML, MD, TXT, XML
Auf einen Blick
- Was ist das?
- Trafilatura ist ein Python-Paket und CLI-Werkzeug, das Webseiten lädt, Haupttext und Metadaten herauszieht und als TXT, Markdown, CSV, JSON, HTML, XML oder XML-TEI ausgibt. Die Lizenz ist Apache-2.0, die Extraktion stützt sich auf einen regelbasierten Extraktor mit jusText und readability-lxml als Rückfallebene.
- Für wen ist es gedacht?
- Trafilatura passt zu Teams, die aus HTML verlässlich Fließtext und Metadaten für Korpora, Suche oder RAG-Pipelines brauchen und dafür kein Datenbanksystem betreiben wollen. Wer JavaScript-gerenderte Seiten oder strikt strukturierte Produktdaten aus Shops verarbeiten muss, ist mit einem Browser-gestützten Scraper besser bedient.
- Darf ich es kommerziell nutzen?
- Ja. Apache-2.0 ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 4 Tagen.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Python, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welches Problem Trafilatura löst
Roh-HTML enthält Navigation, Werbeinseln, Kommentarbereiche, Fußzeilen und Skriptblöcke. Wer daraus einen Korpus für Sprachmodelle, eine Nachrichtensuche oder ein Archiv aufbauen will, braucht den eigentlichen Artikeltext und einige Felder daneben: Titel, Autor, Datum, Seitenname, Kategorien und Schlagworte. Genau dort setzt Trafilatura an. Die README beschreibt das Ziel als Übergang von rohem HTML zu strukturierten, verwertbaren Daten, mit Schwerpunkt auf dem tatsächlichen Inhalt und ohne die wiederkehrenden Seitenelemente. Die Zielgruppe ist entsprechend technisch: Forschende, die Textdatenbanken aufbauen, Teams, die Nachrichtenfeeds einsammeln, und Entwickler, die eine Vorstufe für Such- oder RAG-Systeme benötigen. Das Projekt stammt laut README aus einem PhD-Vorhaben an der Schnittstelle von Linguistik und NLP und wurde zunächst für Textdatenbanken an der Berlin-Brandenburgischen Akademie der Wissenschaften (DWDS und ZDL) gebaut. Diese Herkunft erklärt die Ausrichtung: Es geht nicht um Marketing-Daten, sondern um Fließtext in brauchbarer Qualität.
Wie die Extraktion intern arbeitet
Die README nennt einen eigenen regelbasierten Extraktor für den Haupttext, mit jusText und readability-lxml als Rückfallebene. Das ist der zentrale Mechanismus: Trafilatura verlässt sich nicht auf ein einzelnes Verfahren, sondern kombiniert eine eigene Regelbasis mit zwei etablierten Bibliotheken, wenn die erste Stufe nicht greift. Die Dokumentation spricht von einem Kompromiss zwischen Präzision und Recall, also zwischen dem Aussortieren von Rauschen und dem Einbehalten gültiger Textteile. Das ist eine bewusste Abwägung, keine Eigenschaft, die sich wegkonfigurieren lässt. Neben dem Text erkennt das Werkzeug Struktur: Absätze, Überschriften, Listen, Zitate, Code, Zeilenumbrüche und Inline-Formatierung. Kommentare, Links, Bilder und Tabellen sind optional zuschaltbar, ebenso Sprachbestimmung und Geschwindigkeitsoptimierungen. Der Datenfluss folgt damit einem klaren Muster: HTML holen, Haupttext und Metadaten herauslösen, Struktur erhalten, in ein Ausgabeformat serialisieren. Ein Datenbanksystem ist laut README nicht erforderlich, was den Betrieb vereinfacht, aber auch bedeutet, dass Deduplizierung und Speicherung außerhalb des Werkzeugs stattfinden müssen.
Erkennung von Quellen: Sitemaps, Feeds und Download-Warteschlangen
Trafilatura ist nicht nur ein Extraktor. Die Feature-Liste nennt Unterstützung für Sitemaps im TXT- und XML-Format sowie für Feeds in ATOM, JSON und RSS. Dazu kommt ein URL-Management mit Filterung und Deduplizierung, das als smartes Crawling beschrieben wird. Für den Aufbau eines Nachrichtenkorpus ist das der praktisch relevante Teil: Statt eine Liste von Startseiten manuell zu pflegen, lassen sich Feed- und Sitemap-Quellen einlesen und die daraus abgeleiteten Adressen weiterverarbeiten. Die Verarbeitung läuft parallel, sowohl für Live-URLs als auch für bereits heruntergeladene HTML-Dateien und für geparste HTML-Bäume. Die README spricht von einer höflichen Abwicklung von Download-Warteschlangen. Wer größere Mengen abruft, sollte diese Eigenschaft nicht als Freibrief verstehen: Die Höflichkeit liegt in der Implementierung, die Verantwortung für Rate-Limits und robots-Regeln bleibt beim Betreiber des Crawls. Der Offline-Pfad ist für reproduzierbare Auswertungen wichtiger als der Online-Pfad, weil er denselben Extraktor auf eingefrorenem HTML ausführt und damit Vergleiche über die Zeit erlaubt.
Installation und erste Befehle
Die Installation läuft über PyPI, das Paket heißt trafilatura. Für die Nutzung in Python zeigt die README dieses Beispiel: from trafilatura import fetch_url, extract, dann downloaded = fetch_url("https://github.blog/2019-03-29-leader-spotlight-erin-spiceland/") und schließlich extract(downloaded). Das Ergebnis ist ein String mit dem Fließtext. Für Metadaten wird derselbe Aufruf mit zwei Parametern erweitert: extract(downloaded, output_format="json", with_metadata=True). Die README gibt dafür ein konkretes Ergebnis aus, ein JSON-Objekt mit den Feldern title, author und text. Wer die Kommandozeile bevorzugt, findet die Optionen in der Dokumentation unter usage-cli, darunter das Flag --with-metadata, das im Abschnitt zur Ausgabe dokumentiert ist. Die Ausgabeformate umfassen TXT und Markdown, CSV, JSON, HTML, XML und XML-TEI. Für linguistische oder geisteswissenschaftliche Projekte ist XML-TEI der interessante Punkt, weil damit ein Standardformat vorliegt, das sich in bestehende Werkzeugketten einfügen lässt. Die Dokumentation verweist zusätzlich auf ein interaktives Notebook im Repository und auf eine Videoreihe in mehreren Sprachen.
Grenzen und Fälle, in denen das Werkzeug nicht passt
Der regelbasierte Ansatz hat eine erkennbare Schwäche: Er arbeitet auf dem HTML, das der Abruf liefert. Seiten, die ihren Inhalt erst per JavaScript aufbauen, erreichen den Extraktor nicht in verwertbarer Form, und die README nennt keinen Rendering-Schritt. Wer solche Ziele hat, braucht einen Browser im Ablauf und übergibt das gerenderte HTML anschließend an Trafilatura, was den Betrieb aufwendiger macht als ein reiner HTTP-Abruf. Ein zweites Problem ist die Bewertungslage. Die README verweist auf Benchmarks und auf mehrere externe Vergleiche, in denen das Werkzeug gut abschneidet. Diese Ergebnisse stammen aus publizierten Studien und aus dem repositoryeigenen Testverzeichnis. Sie sagen nichts über die eigene Zielseite. Ein Nachrichtenportal mit gleichförmigem Layout ist ein anderer Fall als ein Forum oder ein Shop mit heterogenen Produktseiten. Die README beschreibt das Werkzeug ausdrücklich als auf Artikelinhalte ausgerichtet, mit Kommentaren als optionalem Element. Wer strukturierte Produktdaten, Preise oder Tabellen als primäres Ziel extrahieren will, arbeitet gegen die Ausrichtung des Projekts. Der Kompromiss zwischen Präzision und Recall ist zudem nicht neutral: Eine Einstellung, die Rauschen zuverlässig entfernt, kann kurze Absätze oder Randnotizen verlieren, und umgekehrt.
Was andere Werkzeuge anders machen
Die README nennt jusText und readability-lxml, aber nicht als Alternativen, sondern als Rückfallebene innerhalb von Trafilatura selbst. Der Unterschied zu diesen beiden ist aufschlussreich. Trafilatura versucht, die Stärken zu kombinieren und zusätzlich Metadaten, Struktur und mehrere Ausgabeformate zu liefern. Wer readability-lxml direkt einsetzt, bekommt eine einzelne Extraktionsstrategie und muss Metadaten, Struktur und Serialisierung selbst ergänzen. Der umgekehrte Fall ist ebenso wichtig: Wer nur den reinen Artikeltext braucht und keine Metadaten, keine Kommentare, keine TEI-Ausgabe und kein Crawling, findet in einer schlanken Einzelbibliothek weniger bewegliche Teile. Trafilatura ist in diesem Vergleich das größere Werkzeug mit mehr Konfigurationsfläche. Die Feature-Liste ist lang, und jede Option, die man nicht nutzt, bleibt dennoch Teil der Abhängigkeitskette. Für Skripte, die genau eine Sache tun sollen, ist das ein Nachteil, der sich nicht wegdiskutieren lässt.
Wartung, Versionen und Lizenz
Die letzten Veröffentlichungen sind v2.0.0 vom Dezember 2024, v2.1.0 vom Juni 2026 und v2.2.0 vom Juli 2026. Der Sprung von 2.0 auf 2.1 und 2.2 innerhalb weniger Monate deutet auf aktive Pflege hin, und der letzte Push auf den master-Zweig liegt laut Repository-Angabe im August 2026. Ein Punkt, der bei der Aktualisierung Beachtung verdient, steht in der README selbst: Versionen vor v1.8.0 standen unter GPLv3+, ab v1.8.0 gilt Apache-2.0. Wer ältere Versionen in einem Produkt einsetzt oder Code daraus übernommen hat, sollte diese Zäsur kennen. Für die aktuelle Version bedeutet Apache-2.0, dass eine Einbindung in kommerzielle Produkte ohne Copyleft-Pflicht auf den eigenen Code möglich ist, solange die Lizenzbedingungen eingehalten werden. Das ist eine allgemeine Einordnung, keine Rechtsberatung, und die maßgebliche Quelle bleibt der Lizenztext. Die README bittet ausdrücklich um Unterstützung über GitHub Sponsors oder ko-fi, mit dem Hinweis, dass die Zukunft des Pakets von der Community abhängt. Das ist ein ehrlicher Hinweis auf die Pflegelage: ein Projekt, das im Wesentlichen von einer Person und Beiträgen aus der Community getragen wird.
Für wen sich der Einsatz lohnt
Der stärkste Fall für Trafilatura ist ein Team, das aus einer definierten Menge von Nachrichten- oder Blogseiten einen Textkorpus aufbauen will und dabei Metadaten wie Titel, Autor und Datum mitnehmen möchte, ohne eine Datenbank oder einen eigenen Parser zu betreiben. Der zweite starke Fall ist die Nachverarbeitung bereits heruntergeladener HTML-Dateien, weil derselbe Extraktor offline auf geparsten Bäumen läuft und damit reproduzierbare Läufe erlaubt. Wer dagegen ausschließlich mit clientseitig gerenderten Anwendungen zu tun hat oder Produktdaten statt Prosa braucht, sollte zuerst prüfen, ob der Extraktor auf seinen Seiten überhaupt greift. Der konkrete nächste Schritt ist ein Testlauf mit einem eigenen Beispiel: fetch_url auf eine typische Zielseite, dann extract mit output_format="json" und with_metadata=True, und anschließend der Vergleich, welche Felder gefüllt sind und welche fehlen. Fällt der Autor oder das Datum regelmäßig leer aus, liegt das an der Seite und nicht an der Ausgabeoption, und dann ist die Frage zu klären, ob die Metadaten aus einer anderen Quelle kommen müssen.
Redaktionelles Fazit
Trafilatura passt zu Teams, die aus HTML verlässlich Fließtext und Metadaten für Korpora, Suche oder RAG-Pipelines brauchen und dafür kein Datenbanksystem betreiben wollen. Wer JavaScript-gerenderte Seiten oder strikt strukturierte Produktdaten aus Shops verarbeiten muss, ist mit einem Browser-gestützten Scraper besser bedient. Vor dem Produktiveinsatz sollte man die Ausgabe an eigenen Beispielseiten prüfen, insbesondere mit --with-metadata und output_format="json", und die Lizenzangabe im eigenen Repository korrekt auf Apache-2.0 setzen.
Community-Notizen