markdownify dorovnal markitdown v počtu vygenerovaných řádků Markdown tabulek a vejde se do 1,8 MiB

Naposledy aktualizováno August 17, 2026
markdownify dorovnal markitdown v počtu vygenerovaných řádků Markdown tabulek a vejde se do 1,8 MiB
AI shrnutí
Na čtyřech HTML ukázkách sdílených s markitdown vytvořil markdownify stejný počet vygenerovaných řádků Markdown tabulek podle našeho počítadla — 36 proti 36 — a obnovil všech 16 kontrolovaných textových řetězců. Jeho výstup o délce 21 062 tokenů byl sice nominálně nejnižší, ale první tři převodníky se vešly do rozdílu 1,3 %. Instalace zabere 1,8 MiB, je pod licencí MIT a v době snímku měl 2 235 hvězdiček na GitHubu. V této kategorii je to nejméně probíraná knihovna a podle těchto čísel i ta, po které bych sáhl jako první. Začněte s markdownify u Python úloh podobných těmto ukázkám.

Na čtyřech HTML ukázkách sdílených s markitdown vytvořil markdownify stejný počet vygenerovaných řádků Markdown tabulek podle našeho počítadla — 36 proti 36 — a obnovil všech 16 kontrolovaných textových řetězců. Jeho výstup o délce 21 062 tokenů byl sice nominálně nejnižší, ale první tři převodníky se vešly do rozdílu 1,3 %. Instalace zabere 1,8 MiB, je pod licencí MIT a v době snímku měl 2 235 hvězdiček na GitHubu.

V této kategorii je to nejméně probíraná knihovna a podle těchto čísel i ta, po které bych sáhl jako první.

Co je markdownify

markdownify je Python knihovna pro převod HTML do Markdownu postavená na BeautifulSoup. To je celá architektura: BeautifulSoup HTML rozparsuje, projde strom a vypíše Markdown. Testovaná verze: 1.2.3, MIT, 2 235 hvězdiček, 42 otevřených issues, poslední vydání 2026-06-30 — aktivně udržovaná, 44 vydání.

Oficiální reference: oficiální repozitář python-markdownify.

System diagram: HTML to Markdown Path

API je jedna funkce:

from markdownify import markdownify
md = markdownify(html)

K dispozici je i třídní varianta (MarkdownConverter), pokud chcete přepsat chování pro jednotlivé prvky, a také slušná sada voleb — styl nadpisů, odrážky, rozpoznávání jazyka v kódu, odstraňování prvků. V praxi ale nejčastěji stačí jednořádkové použití a funguje bez problémů.

pip install markdownify stáhne 5 balíčků a 1,8 MiB, a studený import trvá 0,046 s — nejrychleji ze tří převodníků, které jsem porovnával. Závislosti tvoří BeautifulSoup a jeho obvyklí společníci, které už mnoho Python projektů stejně používá, takže dodatečné náklady bývají téměř nulové.

Jak měření probíhalo

Spustil jsem to na čtyřech HTML ukázkách, které už jiný balík v tomto benchmarku použil pro markitdown, a s jeho předem připravenými kontrolními řetězci — 16 přesných textů v těle stránky sledovaných na zachování, plus kontrolami boilerplate obsahu stránky. Pátá ukázka, Nothing but tables, je samostatný diagnostický test zaměřený hlavně na tabulky a do souhrnu čtyř ukázek níže není zahrnuta.

PřevodníkKontroly obsahuPočet znaků výstupuTokeny (o200k)Řádky Markdown tabulekOdkazy
markdownify16/1676,86821,06236599
html2text16/1676,45221,17632545
markitdown16/1676,99521,33636598
turndown16/1695,18826,2360611

fourway-scores.json. Čtyři ukázky, tokeny počítané přes o200k_base, řádky tabulek podle jednoho pravidla napříč všemi čtyřmi — včetně nového přepočtu uloženého výstupu markitdown, který přesně odpovídal zveřejněné hodnotě.

Vystupují tři hlavní věci.

V počtu vygenerovaných řádků tabulek se shoduje s markitdown. Na čtyřech sdílených ukázkách 36 řádků proti 36, počítáno stejnou heuristikou. To neprokazuje shodu buňku po buňce; jen to říká, že oba výstupy pro toto počítadlo obsahovaly stejný počet rozpoznatelných řádků Markdown tabulek.

Má nejnižší počet tokenů. 21 062, tedy o něco méně než 21 176 u html2text a 21 336 u markitdown, a o 19,7 % méně než 26 236 u turndown. První tři jsou do 1,3 % od sebe, takže bych je označil spíš za remízu než za vítězství; skutečný rozdíl je proti turndown.

Všechny kontrolní texty přežily. Všech 16. Stejně tak u zbývajících tří — v samotném zachování obsahu se tyto knihovny neliší.

Tabulka, kterou zvládá správně

Ukázka s hokejovými statistikami je místo, kde se převodníky oddělí. markdownify:

| Team Name | Year | Wins | Losses | OT Losses | Win % | ... |
| --- | --- | --- | --- | --- | --- | --- |
| Boston Bruins | 1990 | 44 | 24 |  | 0.55 | ... |

Standardní GFM s úvodními i koncovými svislítky, oddělovacím řádkem a — všimněte si prázdné buňky mezi 24 a 0.55vypíše prázdnou buňku, místo aby ji přeskočil. To zní banálně, ale není to banální: převodník, který prázdné buňky zahazuje, posune všechny následující hodnoty do špatného sloupce a výstup pořád vypadá jako platná tabulka.

System diagram: Preserve Table Meaning

turndown na stejném vstupu vypíše každou hodnotu jako samostatný odstavec bez jakékoli sloupcové struktury. html2text vytvoří správnou tabulku, ale v jiném stylu, bez vnějších svislítek.

Pokud má Markdown jít do modelu, právě svislítka a zachovaná prázdná buňka mu umožní odpovědět „kolik zápasů Boston prohrál“ místo hádání.

Dvě věci, které odstraňuje a turndown ne

Věrnost tabulek je viditelný rozdíl. Tahle vlastnost je větší a skoro ji nikdo nezmiňuje.

markdownify odstraňuje obsah z <script> a <style>. turndown ne. Pokud se to počítá podle značek, které se vyskytují pouze uvnitř těchto prvků, výstup markdownify napříč ukázkami nese nulový počet značek skriptů i stylů; turndown jich nese 10 a 84. Na Wikipedii je to rozdíl mezi 59 561 znaky a 74 939 — a osm řádků inline JavaScript konfigurace a CSS z MediaWiki tvoří 14 644 znaků, tedy 95 % tohoto rozdílu (script-style-stripping.json).

Pro cokoli, co jde do modelu, je to v celém srovnání nejdražší položka: JavaScriptový konfigurační blob stojí tokeny a nenese vůbec žádnou informaci. markdownify ho odstraní bez ptaní. Stejně tak html2text.

Na jednotlivých ukázkách se markdownify a html2text přesně shodnou tam, kde je tabulka jednoduchá, a rozcházejí tam, kde jednoduchá není:

Ukázkamarkdownifyhtml2text
Hokejové statistiky27 řádků27 řádků
Wikipedia9 řádků5 řádků
Nothing but tables (samostatná diagnostika)62 řádků59 řádků

markdownify na obou diagnostických porovnáních vygeneruje více rozpoznaných řádků. Na Wikipedii konkrétně zachová devět řádků tam, kde html2text podle tohoto počítadla zachová pět. To je užitečné varování: před volbou je potřeba otestovat reprezentativní vnořené a nepravidelné tabulky, ne důkaz, že každá vypsaná buňka je sémanticky správně.

Instalace a licence vedle alternativ

KnihovnaBalíčkyVelikost na diskuStudený importLicenceHvězdičkyPoslední vydání
markdownify51,8 MiB0,046 sMIT2 2352026-06-30
html2text10,2 MiB0,077 sGPL-3.0-or-later2 1682025-04-15
turndown3 (npm)8,8 MiB0,056 sMIT11 3862026-04-03

Oficiální reference: markdownify na PyPI.

install-and-import.json a metadata-snapshot.json. Každá knihovna byla nainstalována do vlastního prázdného prostředí.

html2text zabírá na disku devětkrát méně a má licenci GPL-3.0-or-later. U distribuovaného produktu to berte jako kontrolní bod pro toho, kdo odpovídá za licencování; tento článek není právní rada. markdownify je MIT, což je obecně volnější, ale i tak je potřeba ho zahrnout do běžné licenční kontroly.

Těch 1,8 MiB je navíc do jisté míry jen orientační hodnota, pokud váš projekt už BeautifulSoup používá — a spousta Python scraping projektů ho používá. V takovém případě je markdownify prakticky zadarmo.

Tempo vydávání je u markdownify ze všech tří nejlepší: 44 vydání a aktualizace šest týdnů před testem, zatímco html2text mělo poslední vydání v dubnu 2025.

Co vám jedna řádka Pythonu vlastně dá

Celá knihovna je markdownify(html), a stojí za to přesně říct, co tahle volání rozhoduje za vás, protože tři z těch rozhodnutí jsou přesně ta, na která se toto srovnání zaměřilo.

Použije BeautifulSoup, bez ptaní odstraní <script> a <style> a generuje tabulky ve stylu GFM s vnějšími svislítky a zachovanými prázdnými buňkami. Samotný původ parseru nezaručuje chování u chybně zapsaného HTML, proto se na to díváme zvlášť níže.

Nic z toho nejsou volby, které musíte nastavovat. Je to výchozí chování. A v kategorii, kde výchozí nastavení turndown zachovává JavaScript a html2text standardně zalamuje na 78 znaků, má knihovna, která po vybalení z krabice nepotřebuje žádné opravy, sama o sobě hodnotu.

Volby tu jsou, když je chcete — heading_style, bullets, code_language, strip a convert pro allowlisty a denylisty prvků, a MarkdownConverter pro přepisování chování po jednotlivých prvcích. Všechno, co je zde měřeno, ale žádné z nich nepoužilo.

Paměť a co s ní udělá rozbité HTML

Measured results chart: markdownify: memory and malformed input

Širší kontext zátěžových testů je v porovnání paměti a chybného HTML u deseti knihoven.

Dvě věci, které v této sérii recenzí byly uvedené jako netestované, jsou teď změřené.

Špičkové využití paměti, přes /usr/bin/time -l, vždy nový proces pro každou buňku — základ importu je to, co knihovna stojí, když je načtená a nečinná; špičky zahrnují i dokument.

KnihovnaRuntimeZáklad importušpička při 226 KBšpička při 10 MB
html2textpython3.1418.719.971.2
pyquerypython3.1430.333.9172.5
resiliparsepython3.1420.525.1225.1
markdownifypython3.1423.928.9278.5
goose3python3.1444.152.4398.5
cheerionode2266.876.5398.5
justextpython3.1430.336.6431.2
newspaper4kpython3.1452.661.8668.5
trafilaturapython3.1452.564.8927.1
turndownnode2247.868.42947.1

memory-results.json. Základní hodnoty pro Python a Node nejsou navzájem přímo porovnatelné; interpret je v obou případech součástí výsledku.

markdownify je uprostřed: základ 23,9 MiB a 278,5 MiB při dokumentu o velikosti 10 MB. To je 3,9× více než peak u html2text a zhruba desetina turndown, což je cena za BeautifulSoup pod kapotou.

Rozbité HTML. Dvanáct dokumentů, z nichž každý rozbíjí právě jednu věc — neuzavřené tagy, špatně zanořené inline prvky, neuzavřené atributy s mezerami, osamocené zavírací tagy, úplná absence <html>, duplicitní atributy, dokument uříznutý uprostřed tagu, špatné entity, neuzavřený <script>, lživé deklarace kódování, komentář obsahující značky a 600 úrovní zanoření — plus dva dobře formované kontrolní dokumenty se stejnou velikostí, protože „nic nevrátil“ něco vypovídá o chybnosti HTML jen tehdy, když knihovna zároveň mlčí i na čistém dokumentu stejné velikosti.

markdownify skončil s chybou u 1 z 14 a nevrátil nic u 0, přičemž obnovil 30/33 sledovaných markerů napříč rozbitými ukázkami (malformed-results.json). Jedna ukázka je z tohoto počtu vyňata: podle HTML5 je všechno po neuzavřeném <script> skutečně obsah skriptu, takže ztráta v tomto případě je správná a obnovení by bylo odchylkou.

Klady a zápory

Ve prospěch. Stejná věrnost tabulek jako markitdown, měřeno stejným pravidlem. Nejnižší počet tokenů ze čtyř. MIT. 1,8 MiB a prakticky nulový dodatečný náklad, pokud už máte v projektu BeautifulSoup. Nejrychlejší studený import: 0,046 s. Aktivně vydávaný. Zachovává prázdné buňky v tabulkách. Přepisování převodu po prvcích přes MarkdownConverter. Jednořádkové použití je správná volba.

Proti. Závisí na BeautifulSoup, takže na disku zabírá devětkrát víc než html2text, pokud ho už stejně nemáte. 2 235 hvězdiček znamená menší komunitu než má turndown — méně hotových příkladů, když narazíte na něco zvláštního. Jen Python, takže v Node stacku nepomůže. A 42 otevřených issues.

Kdo by ho měl používat a kdo ne

Začněte s markdownify u Python úloh podobných těmto ukázkám. V tomto počítání se vyrovná markitdown v počtu vygenerovaných řádků tabulek, patří do skupiny s nejnižším počtem tokenů a je pod licencí MIT. Pokud už závisíte na BeautifulSoup, jeho dodatečná instalační stopa může být malá; ověřte si skutečný přírůstek závislostí ve vašem prostředí.

Zvažte html2text, pokud je rozpočet na závislosti v řádu stovek kilobajtů a jeho tvar výstupu vám pro vaše stránky vyhovuje. Před distribucí si s tím, kdo spravuje licence, projděte GPL-3.0-or-later.

Zvažte markitdown, pokud už stejně převádíte PDF nebo Office dokumenty. Jeho HTML výsledky zde měly stejný počet vygenerovaných řádků tabulek, ale širší věrnost nebyla prokázána jako ekvivalentní.

Přeskočte ho v Node, kde je přirozenou odpovědí turndown — spolu s turndown-plugin-gfm, protože samotné jádro turndown nevytváří žádné tabulky.

Kde dává smysl spravované API

markdownify převádí HTML, které už máte. Nestahuje stránky, neinterpretuje JavaScript, neřeší anti-bot vrstvu — nic z toho nedělá ani jeden ze čtyř převodníků, a u mnoha reálných cílů je to ta těžší polovina práce.

Pro stejné ukázky napříč všemi pěti převodníky se podívejte na pětisměrné porovnání HTML-to-Markdown.

Náš vlastní vývojářský stack v Thunderbit řeší právě tu upstream část: POST /distill stáhne URL a vrátí Markdown, zatímco POST /extract vrátí JSON ve struktuře podle schématu. Obojí je dostupné přes MCP server i CLI; ceny jsou na cenové stránce Thunderbit. Tato hostovaná endpointy nebyly benchmarkovány proti zdejším lokálním převodníkům, takže jde o rozdíl mezi kategoriemi, ne o výkonnostní srovnání.

Poctivé shrnutí: pokud už máte HTML a chcete Markdown, markdownify je zdarma a odvádí práci stejně dobře jako cokoli tady. Pokud stránky teprve stahujete nebo chcete spíš řádky než prozaický text, je to jiný nákup.

Širší přehled nabízí naše shrnutí web scraping API pro hostované možnosti a pillar open-source scraperů pro self-hosted varianty. Praktický postup najdete v článku Převod HTML do Markdownu v Pythonu.

Vyzkoušejte Thunderbit pro extrakci webových dat

Měli byste používat markdownify?

Pro Python je to silný kandidát, pokud vaše vstupy připomínají tyto ukázky; otestujte ho na vlastních tabulkách a rozbitých stránkách, než ho nastavíte jako výchozí.

V tomto měření se vyrovná markitdown v počtu vygenerovaných řádků tabulek, patří do skupiny s nejnižším počtem tokenů, při tomto běhu importoval nejrychleji a je pod licencí MIT. Proti tomu stojí vyšší paměťová náročnost než u html2text, omezení na Python a chyba na jedné ukázce s chybně zapsaným HTML. Velikost na disku a licence jsou další kritéria výběru, ne jediný argument.

Zaujme mě hlavně počet hvězdiček. turndown má pětkrát víc pozornosti a z krabice přitom nepřevádí žádnou z tabulek, které markdownify zvládá správně. Popularita v této kategorii neodpovídá naměřenému chování, a právě proto stálo za to tento test spustit.

Vyzkoušejte Thunderbit pro extrakci webových dat Get Started Free

Často kladené otázky

Je markdownify na HTML opravdu tak dobrý jako markitdown? Na těchto čtyřech ukázkách oba vygenerovaly 36 rozpoznaných řádků Markdown tabulek, obnovily všech 16 sledovaných řetězců a lišily se v počtu znaků jen o 0,2 %. To ale není test shody buňku po buňce ani shody renderování. markitdown navíc zvládá i PDF a Office formáty, takže tohle srovnání se týká jen naměřených HTML výstupů.

Potřebuje BeautifulSoup? Ano — je to jeho parser a také většina z 1,8 MiB. Pokud váš projekt už BeautifulSoup používá, dodatečné náklady markdownify jsou malé. Pokud ne a opravdu záleží na velikosti na disku, html2text má 0,2 MiB a jeden balíček, za cenu licence GPL-3.0-or-later.

Jak zachází s prázdnými buňkami v tabulkách? Zachovává je. V ukázce s mezerami v datech výstup ponechá prázdnou buňku na místě, takže každá další hodnota zůstane ve správném sloupci. Převodník, který prázdné buňky přeskočí, vytvoří tabulku, která vypadá platně, ale každá hodnota je o jeden sloupec vlevo — a to je horší chyba, protože na ni nic neupozorní.

Mám použít funkci, nebo třídu? Pro běžný případ funkci markdownify(). MarkdownConverter použijte, když potřebujete přepsat, jak se konkrétní prvek převádí — všechno měřené zde používalo obyčejnou funkci s výchozími volbami.

Co se tu netestovalo? Čtyři sdílené ukázky plus jedna tabulková diagnostika nejsou reprezentativní korpus. Samostatná sada rozbitého HTML pokryla 12 pojmenovaných typů poškození a dva kontrolní dokumenty, ale ne všechny formy chybného HTML. Nebyly porovnávány vnořené seznamy, definiční seznamy, poznámky pod čarou, matematika, round-trip Markdown↔HTML, shoda tabulek na úrovni buněk ani varianty konfigurace. Neporovnávala se ani rychlost převodu.

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.
Obsah
Thunderbit · AI agent pro webová data

Extrahuj data z libovolné stránky za 1 kliknutí

Důvěřuje mu více než 250 000 uživatelů
k dispozici bezplatný plán
Z webové stránky do tabulky
Popiš, co potřebuješ — AI agent Thunderbit to nasbírá a exportuje do Excelu, Google Sheets, Airtable nebo Notion. Začni zdarma.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week