Die beliebteste HTML-zu-Markdown-Bibliothek konvertiert keine Tabellen

Zuletzt aktualisiert am August 17, 2026
Die beliebteste HTML-zu-Markdown-Bibliothek konvertiert keine Tabellen
KI-Zusammenfassung
turndown war zum Zeitpunkt des Metadaten-Snapshots die Bibliothek mit den meisten GitHub-Sternen unter den vier getesteten Kandidaten und kam auf 11.386 Stars. Bei den vier gemeinsamen HTML-Beispielen erzeugte es mit den Standard-Einstellungen keine Markdown-Tabellen und benötigte für dieselben Eingaben 24,6 % mehr Tokens als markdownify. Alle vier Tools stellten sämtliche Content-Checks korrekt wieder her. Die Unterschiede liegen ausschließlich darin, was mit der Struktur passiert – und was diese Struktur später im weiteren Verlauf kostet. Wenn Sie ein Modell füttern oder strukturierten Inhalt von solchen Seiten speichern, beginnen Sie mit markdownify. Es liegt beim unter diesem Zähler ermittelten Tabellenzeilenwert gleichauf mit markitdown, gehört zum niedrigsten Token-Cluster, ist MIT-lizenziert und benötigt 1,8 MiB bei der Installation.

turndown war zum Zeitpunkt des Metadaten-Snapshots die Bibliothek mit den meisten GitHub-Sternen unter den vier getesteten Kandidaten und kam auf 11.386 Stars. Bei den vier gemeinsamen HTML-Beispielen erzeugte sie mit den Standard-Einstellungen keine einzige Markdown-Tabelle und benötigte für dieselben Eingaben 24,6 % mehr Tokens als markdownify.

Alle vier Tools stellten sämtliche Content-Checks korrekt wieder her. Die Unterschiede liegen ausschließlich darin, was mit der Struktur passiert – und was diese Struktur später im weiteren Verlauf kostet.

Was gemessen wurde und auf wessen Beispielen

Diese Untersuchungsbasis hatte bereits ein Paket für markitdown mit fünf HTML-Beispielen und vorab registrierten Prüffragmente — exakte Strings, deren Überleben geprüft wurde, plus Boilerplate-Strings zur Erkennung von Seiten-Overhead. Für den Gesamtvergleich werden die vier Beispiele verwendet, die alle vier Konverter gemeinsam haben: ein Buchshop-Katalog, eine Zitate-Seite, eine Hockey-Statistik-Tabelle und der Wikipedia-Artikel über Web Scraping. Ein fünftes Beispiel, Nur Tabellen, dient ausschließlich als tabellenlastige Diagnose und ist aus der 24,6-%-Gesamtwertung ausgeschlossen.

Die vier: turndown 7.2.4 (Node), markdownify 1.2.3, html2text 2025.4.15 und markitdown, wobei die veröffentlichten Werte unverändert übernommen wurden. Seiten: ein Buchshop-Katalog, eine Zitate-Seite, eine Hockey-Statistik-Tabelle und der Wikipedia-Artikel zu Web Scraping.

Jeder Messwert unten entspricht Feld für Feld markitdowns eigenem Artefakt, sodass die Zeilen direkt nebeneinander stehen können, ohne dass irgendjemand zwei Definitionen desselben Begriffs zusammenführen muss.

Die Tabelle

Gemessene Ergebnisse: Token-Ausgabe vs. Markdown-Tabellenzeilen

KonverterBody-ProbesAusgabezeichenTokens (o200k)Bytes/TokenMarkdown-TabellenzeilenLinks
turndown16/1695,18826,2363.630611
markdownify16/1676,86821,0623.6536599
html2text16/1676,45221,1763.6132545
markitdown16/1676,99521,3363.6136598

Vier Beispiele — dieselben, die auch markitdown verarbeitet hat. Vollständige Werte pro Beispiel finden sich in fiveway-scores.json. Tokens wurden mit o200k_base gezählt; markitdowns Tabellenzeilen wurden aus dem gespeicherten Markdown mit demselben Zähler erneut bestimmt, der auch bei den anderen verwendet wurde.

Inhalt bleibt gleich. Alle sechzehn Body-Probes über die vier Beispiele hinweg überlebten bei jedem Konverter. Wenn Ihre einzige Frage lautet: „Kommt der Text durch?“, lautet bei allen vier die Antwort ja.

Struktur ist keine Gleichstandssache. Über die vier gemeinsamen Beispiele hinweg erzeugen markdownify und markitdown jeweils 36 Markdown-Tabellenzeilen; html2text erzeugt 32; turndown keine. Im separaten Diagnosefall „nur Tabellen“ erzeugte markdownify 62 Zeilen und html2text 59; diese Zeilen sind in der obigen Gesamtwertung nicht enthalten.

Die Token-Kosten sind bei turndown 24,6 % höher — und der Grund sind nicht die Tabellen. Ich dachte zunächst, genau das sei der Grund, doch die Zahlen pro Beispiel sagen etwas anderes — siehe unten.

Was turndown mit einer Tabelle macht

Hier ist das Hockey-Statistik-Beispiel, dieselben Zeilen, drei Varianten.

turndown:

Systemdiagramm: Die zentralen Tabellenpfade gehen auseinander

Team Name

Year

Wins

Losses

Boston Bruins

1990

44

24

markdownify:

| Team Name | Year | Wins | Losses | ... |
| --- | --- | --- | --- | --- |
| Boston Bruins | 1990 | 44 | 24 | ... |

html2text:

Team Name  |  Year  |  Wins  |  Losses  | ...
---|---|---|---|---
Boston Bruins  |  1990  |  44  |  24  | ...

Jeder Wert überlebt turndowns Umwandlung, deshalb erreicht es bei den Probes 16/16. Nicht erhalten bleibt jedoch welche Spalte zu welchem Wert gehört. Liest man die Ausgabe von turndown, ist 44 nur eine Zahl in einer Zeile; man kann nicht mehr erkennen, dass es sich um die Siege von Boston handelt, ohne Positionen mitzuzählen und zu hoffen, dass keine Zelle leer war. In diesem Beispiel sind einige Zellen leer, also funktioniert auch das Zählen der Positionen nicht.

Für ein Modell, das die Ausgabe liest, ist das der Unterschied zwischen einer Tabelle, zu der es Fragen beantworten kann, und einer Zahlenliste, bei der es raten muss.

Das ist weniger ein Defekt als eine dokumentierte Grenze — der Kern von turndown unterstützt Tabellen nicht, und turndown-plugin-gfm ergänzt diese Funktion. Die Standardinstallation enthält das Plugin jedoch nicht, und 11.386 Sterne deuten darauf hin, dass viele Menschen tatsächlich die Standardvariante nutzen.

Woher die Token-Lücke wirklich kommt

Den Absatz oben schrieb ich mit der Annahme, die 24,6-%-Token-Differenz entstehe durch die flachgedrückten Tabellen. Als ich es dann pro Beispiel betrachtet habe, stimmte das nicht.

Beispielturndown-Tokens ÷ markdownify-Tokens
Zitate-Seite (keine Tabellen)0.99×
Buchshop-Katalog1.06×
Hockey-Statistiken (eine große Tabelle)1.37×
Wikipedia (hauptsächlich Fließtext, 9 Tabellenzeilen)1.29×
Nur Tabellen0.78×

Beim Beispiel, das nur Tabellen enthält, ist turndown 22 % günstiger — denn Pipe-Gerüst kostet ebenfalls Tokens, und turndown erzeugt davon gar nichts. Eine Tabelle zu vereinfachen ist für sich genommen also kein Token-Nachteil.

Das Wikipedia-Beispiel macht 74 % des Gesamts aus und enthält neun Tabellenzeilen. Die Lücke von 15.378 Zeichen kann also nicht von Tabellen kommen. Sie entsteht hier:

(function(){var className="client-js vector-feature-language-in-header-enabled…
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}…
(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web…

turndown entfernt Inhalte aus <script> und <style> nicht. markdownify und html2text tun das beide. Gezählt anhand von Markern, die nur innerhalb dieser Elemente vorkommen: Die Ausgabe von turndown enthält über alle Beispiele hinweg 10 Script-Marker und 84 Style-Marker; die beiden anderen enthalten von beiden jeweils null. Auf der Wikipedia-Seite machen acht Zeilen mit MediaWikis Inline-JavaScript-Konfiguration und CSS 14.644 Zeichen aus — 95 % der gesamten Lücke (script-style-stripping.json).

Das ist die Erkenntnis, auf die ich tatsächlich reagieren würde. Eine flachgedrückte Tabelle ist ein sichtbares Strukturproblem. Ein JavaScript-Konfigurationsblock im Markdown ist reiner Ballast ohne Informationswert — und auf einer realen Seite übertrifft er in diesem Vergleich alles andere bei weitem.

html2text schreibt Tabellen, die man vielleicht nicht sofort erkennt

html2text kam auf 32 Zeilen, während markdownify und markitdown auf 36 kamen, und die erste Version meines Zählers setzte es auf 1.

Das lag an meiner Zählregel, nicht an der Bibliothek. html2text gibt Team Name | Year | Wins ohne führende und abschließende Pipes aus — eine gängige Markdown-Tabellenform, die ein Regex mit ^\|.*\|$ aber nicht erkennt. Ich hatte genau diesen Regex geschrieben, ausgeführt und war schon bereit zu berichten, html2text könne keine Tabellen.

Doch, kann es. Der korrigierte Zähler nutzt eine Heuristik: eine Folge von Zeilen mit Pipes und einer Trennzeile dazwischen. Mit dieser Regel springt html2text von 1 auf 32. Das ist kein vollwertiger Markdown-Parser, daher sollten die Zeilensummen als Messwerte unter einem dokumentierten Zähler und nicht als universelle Rendering-Ergebnisse gelesen werden.

Wichtig, wenn Sie Markdown mit eigenen Regexes weiterverarbeiten: Zwei dieser vier Bibliotheken geben äußere Pipes aus, eine nicht.

Die Lizenz, über die niemand spricht

KonverterLizenzInstallationKaltstart-ImportStarsLetzte Veröffentlichung
turndownMIT3 npm-Pakete, 8.8 MiB0.056 s11,3862026-04-03
markdownifyMIT5 Pakete, 1.8 MiB0.046 s2,2352026-06-30
html2textGPL-3.0-or-later1 Paket, 0.2 MiB0.077 s2,1682025-04-15
markitdownSiehe Paket-MetadatenIn diesem Installationslauf nicht gemessenNicht gemessen

install-and-import.json. Jede Bibliothek wurde in eine eigene leere Umgebung installiert. Die Lizenzen wurden aus drei Quellen bestätigt: den Registry-Metadaten, dem GitHub-Repository und der eigenen METADATA-Datei des installierten Pakets, in der License-Expression: GPL-3.0-or-later steht.

Die leichteste Bibliothek in diesem Installationsvergleich — ein Paket, 0.2 MiB — ist GPL-3.0-or-later. Ob das ein Problem für ein Projekt ist, hängt davon ab, wie die Software kombiniert und verteilt wird. Verstehen Sie das als Auswahlpunkt für die Person, die die Lizenzverantwortung trägt; dieser Artikel ist keine Rechtsberatung. markitdown ist hier als nicht gemessen aufgeführt, weil Installation und Lizenz in diesem Artefakt nicht erfasst wurden.

Dieser Kompromiss geht leicht unter, weil die Lizenz die einzige Eigenschaft ist, die in einem Benchmark nicht sichtbar wird.

Alle drei sind deutlich schlanker als die Artikel-Extraktionsbibliotheken derselben Kategorie — dort liegen die Werte bei 21 bis 70 MiB. Ein Konverter ist etwas viel Kleineres als ein Extraktor, und es lohnt sich, diesen Unterschied im Abhängigkeitsbudget zu trennen.

Zwei Störfaktoren, die ich vor dieser Tabelle korrigieren musste

Die Zahlen oben sind Version drei. Die ersten beiden waren auf Arten falsch, die sich lohnen zu benennen, weil sie leicht nachzustellen sind.

Fünf Beispiele gegen vier. markitdown verarbeitete vier dieser fünf Dateien; die anderen drei Tools alle fünf. Wenn man jedes Tool über sein eigenes Set summiert, kommt markdownify auf 98 Tabellenzeilen gegenüber markitdowns 36 — und es sieht aus wie ein Fähigkeitsunterschied. Über dieselben vier sind es 36 gegen 36 — ein exaktes Unentschieden. Das fünfte Beispiel ist das tabellenlastige, also lief der Störfaktor in die schlimmstmögliche Richtung und ließ die Neueinsteiger gegenüber dem etablierten Tool um fast das Dreifache besser wirken.

Systemdiagramm: Der Vergleich muss vergleichbar sein

Zwei Zähler, eine Spalte. markitdowns veröffentlichter Wert md_table_rows kam aus dem eigenen Code, den ich nicht gelesen hatte. Diesen Wert gegen meinen Zähler zu stellen, hätte zwei Zähler miteinander verglichen statt zwei Konverter. Das Markdown-Ergebnis liegt auf der Festplatte, also bestand die Lösung darin, alle vier mit einem Zähler zu prüfen — und als ich das tat, kam markitdowns Neuberechnung pro Beispiel exakt auf den veröffentlichten Wert (0, 0, 27, 9). Die Definitionen stimmten überein; ohne Prüfung hätte ich das aber nicht wissen können.

Keiner dieser Fehler wäre in der Ausgabe selbst sichtbar gewesen. Beide hätten eine selbstbewusste, aber falsche Tabelle erzeugt.

Wer was verwenden sollte

Sie füttern ein Modell oder speichern strukturierten Inhalt von Seiten wie diesen? Starten Sie mit markdownify. Es liegt beim unter diesem Zähler ermittelten Tabellenzeilenwert gleichauf mit markitdown, gehört zum niedrigsten Token-Cluster, ist MIT-lizenziert und benötigt 1,8 MiB bei der Installation. Prüfen Sie es an Ihren eigenen Seitentypen, bevor Sie es standardisieren.

Ihr Abhängigkeitsbudget wird in Kilobyte gemessen und Sie geben die Software nicht weiter? html2text. Ein Paket, 0.2 MiB, Tabellen bleiben erhalten. Prüfen Sie zuerst die GPL-Frage, und beachten Sie, dass die letzte Veröffentlichung im April 2025 lag.

Sie arbeiten bereits in einem Node-Stack? turndown, zusammen mit turndown-plugin-gfm — und entfernen Sie <script> und <style> aus dem HTML, bevor Sie es übergeben, denn turndown tut das nicht. Diese beiden Auslassungen kosten ein Viertel mehr Tokens und zerstören die Tabellenstruktur, und beides sieht man erst, wenn man die Ausgabe prüft.

Sie konvertieren bereits andere Dokumentformate? markitdown verarbeitet PDF, Office und mehr, und seine HTML-Ausgabe ist mit den spezialisierten Konvertern durchaus konkurrenzfähig. Eine Abhängigkeit statt zweier ist durchaus etwas wert.

Wo eine verwaltete API hineinpasst

Alle vier hier nehmen HTML, das Sie bereits haben. Keiner ruft eine Seite ab, rendert JavaScript oder kümmert sich um Anti-Bot-Schutz — und gerade bei vielen realen Zielen ist genau das die schwierigere Hälfte.

Unser eigener Developer-Stack bei Thunderbit deckt diese Seite ab. POST /distill nimmt eine URL und liefert sauberes, LLM-taugliches Markdown zurück, wobei Rendering und Abruf übernommen werden; POST /extract liefert KI-gestütztes, schema-matches strukturiertes JSON auf Basis eines von Ihnen bereitgestellten JSON-Schemas — also eine andere Ausgabeform, nämlich Zeilen statt einer Markdown-Tabelle, die Sie anschließend erst wieder parsen müssten. Beides ist über einen MCP-Server und eine CLI (npx @thunderbit/thunderbit-cli) erreichbar. Die Preise finden Sie auf der Thunderbit-Preisseite.

Die ehrliche Gegenüberstellung: Wenn Sie das HTML bereits haben und Markdown wollen, ist markdownify kostenlos und erledigt die Aufgabe gut — und diese Tabelle zeigt, welche seiner Rivalen das ebenfalls schaffen. Wenn Sie die Seiten erst abrufen müssen oder strukturierte Zeilen statt Fließtext wollen, ist das ein anderer Kauf.

Für das breitere Feld behandelt unsere Übersicht zu Web-Scraping-APIs gehostete Optionen, und der Open-Source-Scraper-Leitfaden behandelt die selbst gehosteten. HTML in Python zu Markdown konvertieren ist der praktische Durchgang, und was llms.txt standardisieren will erklärt, wohin sich diese ganze Kategorie bewegt.

Thunderbit für Web-Datenextraktion ausprobieren

Fazit

Für diesen Vier-Beispiel-Workload ist markdownify die stärkste Standardwahl: dieselbe Anzahl ausgegebener Tabellenzeilen wie markitdown unter dem gemeinsamen Zähler, eine Token-Zahl innerhalb von 1,3 % der anderen effizienten Konverter, MIT-Lizenz und 1,8 MiB Installationsgröße.

Die Lücke zwischen Popularität und gemessenem Verhalten ist hier die eigentliche Erkenntnis. turndown ist eine ausgezeichnete Bibliothek, die viele Menschen ohne das Plugin installiert haben, das Tabellen unterstützt — und die Kosten dafür zeigen sich als ein Viertel mehr Tokens und eine Tabellenstruktur, die nicht mehr existiert. Keine der beiden Kennzahlen taucht irgendwo auf, solange man sie nicht misst.

Wenn Sie nur eine Sache mitnehmen: Prüfen Sie, was Ihr Konverter mit einer Tabelle macht, bevor Sie seiner Ausgabe ein Modell anvertrauen. Drei dieser vier tun etwas Vernünftiges. Der beliebteste tut es nicht — außer Sie haben es ausdrücklich so eingerichtet.

Thunderbit für Web-Datenextraktion ausprobieren Get Started Free

FAQs

Unterstützt turndown Tabellen wirklich nicht? Der Kern von turndown tut es nicht. Tabellen kommen über turndown-plugin-gfm, ein separates Paket, und ein einfaches npm install turndown bringt es nicht mit. Ohne das Plugin überlebt jede Zelle als eigener Absatz — die Werte sind alle da, die Beziehungen zwischen Zeilen und Spalten aber nicht. Über vier Beispiele hinweg führte das zu null Markdown-Tabellenzeilen und 24,6 % mehr Tokens als markdownify bei gleichem Inhalt.

Warum sah html2text anfangs so aus, als hätte es keine Tabellen? Weil mein Zähler führende und abschließende Pipes verlangte, html2text sie aber nicht ausgibt. Team Name | Year | Wins ist gültiges Markdown und wird korrekt gerendert; es ist nur ein anderer Stil als | Team Name | Year |. Der korrigierte Zähler sucht nach einer Folge von Pipe-Zeilen mit einer Trennzeile dazwischen, so wie es auch ein Parser tun würde — und html2text steigt damit von 1 Zeile auf 32. Wenn Sie Markdown mit eigenen Regexes nachbearbeiten, ist genau das der Unterschied, der Ihnen Probleme macht.

Ist die GPL bei html2text wirklich ein Problem? Das hängt davon ab, wie Sie die Software kombinieren und verteilen. GPL-3.0-or-later kann Verpflichtungen auslösen, die MIT nicht mitbringt. Beziehen Sie also die zuständige Person für Lizenzfragen ein, bevor Sie die Bibliothek in ein verteiltes Produkt aufnehmen. Das ist ein Compliance-Hinweis, keine Rechtsberatung; die Lizenz wurde in Registry-Metadaten, Repository und METADATA des installierten Pakets bestätigt.

Sind diese Token-Zahlen auch für andere Seiten aussagekräftig? Die 24,6-%-Lücke entsteht größtenteils dadurch, dass turndown <script>- und <style>-Inhalte stehen lässt, also skaliert sie mit dem Anteil solcher Inhalte — hoch bei modernen CMS-Seiten, fast null bei statischen Seiten. Tabellen wirken in die andere Richtung: Beim Beispiel, das nur aus Tabellen besteht, war turndown 22 % günstiger, weil es kein Pipe-Gerüst ausgibt. Bytes pro Token lagen bei allen vier zwischen 3,61 und 3,65, die Ausgabedichte ist also überall gleich und der Unterschied ist die Menge. Messen Sie Ihr eigenes Korpus, wenn der Wert für Ihr Budget wichtig ist.

Was wurde hier nicht getestet? Die Vielfalt der Praxis — vier Beispiele bleiben vier Beispiele. Verschachtelte Listen, Definitionslisten, Fußnoten und Mathe. Fehlerhaftes HTML, bei dem Konverter historisch am stärksten auseinanderlaufen. Das Zurückwandeln des Markdown in HTML. docling, das dieselben Beispiele auf Disk hat, dessen veröffentlichter Lauf diese Felder aber nicht meldet, daher ist es hier nicht mit Schätzwerten vertreten. Und Konfiguration: html2text lief mit body_width=0, weil der Standardwert 78 jede Zeile hart umbrechen würde, was sämtliche Zeichen- und Token-Zahlen in dieser Tabelle verändert hätte.

Ke
Ke
CTO bei Thunderbit | Senior Data Scientist & ML-Experte Mit fast zehn Jahren Erfahrung in Machine Learning und Data Science ist Ke Shen Absolvent der Columbia University und ehemaliger Senior Data Scientist bei Walmart Labs. Mit tiefgreifender, von Fachkollegen anerkannter Expertise in Python, R, Java und Statistik teilt er praxiserprobte Einblicke dazu, wie sich komplexe KI-Algorithmen von der Theorie in eine produktionsreife Architektur überführen lassen.
Inhaltsverzeichnis
Von der Webseite zur Tabelle
Beschreibe, was du brauchst — Thunderbits KI-Agent erfasst es und exportiert es nach Excel, Google Sheets, Airtable oder Notion. Kostenlos loslegen.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week