html2text Hanya 0,2 MiB dan Satu Paket. Juga Berlisensi GPL-3.0.

Terakhir diperbarui pada August 17, 2026
html2text Hanya 0,2 MiB dan Satu Paket. Juga Berlisensi GPL-3.0.
Ringkasan AI
html2text menginstal satu paket dengan ukuran 0,2 MiB — sembilan kali lebih kecil daripada alternatif Python terdekat dan empat puluh kali lebih kecil daripada versi Node. Alat ini menyelesaikan keempat halaman dalam suite konversi dan mempertahankan seluruh 16 body probe yang terdaftar. Probe tersebut hanya memeriksa apakah string body tertentu tetap ada; probe ini tidak menilai hierarki, nesting daftar, tujuan link, konten berulang, atau fidelitas tabel secara penuh. Lisensinya juga GPL-3.0-or-later, satu-satunya aspek dalam perbandingan ini yang tidak tercermin dalam benchmark apa pun dan bisa langsung membuat sebuah library tidak layak dipakai.

html2text menginstal satu paket dengan ukuran 0,2 MiB — sembilan kali lebih kecil daripada alternatif Python terdekat dan empat puluh kali lebih kecil daripada versi Node. Alat ini menyelesaikan keempat halaman dalam suite konversi dan mempertahankan seluruh 16 body probe yang terdaftar. Probe tersebut hanya memeriksa apakah string body tertentu tetap ada; probe ini tidak menilai hierarki, nesting daftar, tujuan link, konten berulang, atau fidelitas tabel secara penuh.

Lisensinya juga GPL-3.0-or-later, satu-satunya aspek dalam perbandingan ini yang tidak tercermin dalam benchmark apa pun dan bisa langsung membuat sebuah library tidak layak dipakai.

Apa itu html2text

html2text adalah library Python yang mengubah HTML menjadi teks mirip Markdown. Akar proyek ini berasal dari karya asli Aaron Swartz, dan lini yang masih dipelihara saat ini berada di 2025.4.15 — rilis dengan penamaan berbasis tanggal dari April 2025, dengan 2.168 bintang GitHub, 95 issue terbuka, dan push terakhir pada Oktober 2025.

Referensi resmi: repositori resmi html2text.

import html2text
h = html2text.HTML2Text()
h.body_width = 0          # lihat penjelasan di bawah; nilai default-nya akan mengejutkan Anda
md = h.handle(html)

pip install html2text hanya menarik 1 paket dan 0,2 MiB, dengan cold-import dalam 0,077 s. Tanpa dependensi tambahan. Untuk image container atau Lambda layer, ini perbedaan yang signifikan dibandingkan markdownify yang 1,8 MiB dan turndown yang 8,8 MiB.

Default yang mengubah semua angka

System diagram: The default that changes every number

body_width secara default bernilai 78. Artinya, html2text akan membungkus paksa setiap baris output pada 78 karakter kecuali Anda mematikannya.

Ini default yang masuk akal untuk library yang awalnya dibuat untuk menghasilkan teks biasa yang mudah dibaca di terminal dan email. Namun default ini kurang tepat untuk output yang akan dipakai model AI atau diff, karena newline tambahan akan mengubah tokenisasi, memutus URL panjang di tengah, dan membuat perbandingan output jadi tidak berarti.

Saya menetapkan body_width = 0 untuk semua bagian di bawah ini, dan saya sengaja menegaskannya, bukan menyembunyikannya: dengan wrapping aktif, setiap hitungan karakter dan token di artikel ini akan berbeda. Jika Anda melakukan benchmarking converter sendiri, inilah pengaturan yang diam-diam bisa membuat angka-angka Anda tidak bisa dibandingkan.

Metodenya

Saya menjalankan html2text pada suite konversi empat halaman yang juga digunakan dalam perbandingan markitdown, dengan probe string yang sudah didaftarkan sebelumnya — string body tertentu yang harus tetap ada serta string boilerplate yang menunjukkan elemen chrome halaman ikut terbawa. Empat file yang sama, probe yang sama, satu skema penilaian untuk keempat converter. Kelangsungan probe mengukur keberadaan string yang didaftarkan, bukan kebenaran struktur; kolom tabel dan link dipisahkan justru karena alasan itu.

ConverterBody probesOutput charsTokens (o200k)Markdown table rowsLinks
html2text16/1676,45221,17632545
markdownify16/1676,86821,06236599
markitdown16/1676,99521,33636598
turndown16/1695,18826,2360611

fourway-scores.json. Empat fixture, token dihitung dengan o200k_base.

Output paling kecil dari keempatnya dengan 76.452 karakter, dan secara praktis imbang dalam token dengan markdownify dan markitdown — 21.176 berbanding 21.062 dan 21.336, selisih 1,3% yang menurut saya bukan perbedaan berarti.

32 baris tabel dibanding 36 milik markdownify dan markitdown dalam suite empat halaman. Selisih empat baris itu muncul pada fixture Wikipedia yang tidak beraturan, bukan pada perbedaan format outer-pipe yang dibahas berikutnya.

Link paling sedikit, 545, dibanding 598 hingga 611 untuk yang lain. Layak dicek terhadap halaman Anda sendiri jika pelestarian link penting — ini satu-satunya kolom di mana html2text jelas berada di bawah kelompok lainnya, bukan di dalamnya.

Tabel yang tidak terlihat oleh regex saya

Measured results chart: Table rows retained by fixture

Bagian ini layak diceritakan karena saya hampir menerbitkan kesimpulan yang salah.

Penghitung baris tabel pertama saya mensyaratkan pipe di awal dan akhir — ^\|.*\|$. Dengan aturan itu, html2text hanya mendapat 1 baris tabel dari lima file: suite konversi empat halaman ditambah satu fixture tabel kompleks sintetis terpisah. Penghitung itu mengukur satu gaya Markdown, bukan tabel.

System diagram: Table Shape Without Outer Pipes

Padahal html2text memang mengeluarkan tabel seperti ini:

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

Tanpa outer pipe. Ini sintaks pipe-table yang umum, tetapi harness saya tidak memvalidasinya lintas renderer Markdown. Jadi, pola ini tidak terlihat oleh regex yang mengharapkan format outer-pipe. Setelah penghitung saya ubah agar mencari rangkaian baris yang berisi pipe dengan satu baris pemisah di dalamnya, hasil html2text berubah dari 1 baris menjadi 32 pada suite empat halaman dan 91 untuk kelima file.

Jadi, temuan yang benar bukan bahwa html2text tidak punya tabel. Melainkan, dua dari empat converter ini memakai outer pipe dan satu tidak, dan itu penting kalau Anda memproses Markdown lebih lanjut dengan pattern matching sendiri. Ini hal yang nyata dan saya pasti akan melewatkannya kalau saya percaya begitu saja pada angka pertama.

Apa yang dihapusnya, dan di mana ia kehilangan baris

Dua temuan yang arahnya berlawanan.

Ia menghapus <script> dan <style>. Diukur lewat penanda yang hanya muncul di elemen-elemen itu, output html2text di seluruh fixture mengandung nol penanda script dan nol penanda style. Output turndown mengandung 10 dan 84 — pada fixture Wikipedia, delapan baris konfigurasi JavaScript inline MediaWiki dan CSS bernilai 14.644 karakter (script-style-stripping.json). Untuk output yang ditujukan ke model, ini adalah sumber teks yang paling besar dan sebenarnya bisa dihindari pada fixture tersebut. Biaya model downstream tidak diukur.

Ia kehilangan baris tabel pada halaman yang sulit. Rekap suite empat halaman adalah sebagai berikut:

Fixturehtml2textmarkdownify
Books to Scrape0 rows0 rows
Quotes to Scrape0 rows0 rows
Hockey statistics27 rows27 rows
Wikipedia5 rows9 rows
Total empat halaman32 rows36 rows

Fixture tabel kompleks sintetis terpisah menambahkan 59 baris untuk html2text dan 62 untuk markdownify, sehingga total lima file menjadi 91 dan 98. Fixture ini tidak masuk dalam perbandingan utama empat halaman. Keduanya sama pada tabel hoki yang bersih. Pada Wikipedia, dengan tabel yang bertingkat dan tidak beraturan, html2text mengeluarkan lima baris sementara markdownify sembilan.

Pola yang muncul: tabel sederhana, hasilnya sama; tabel berantakan, html2text menyimpan lebih sedikit. Jika halaman Anda memiliki jenis tabel seperti Wikipedia, uji dulu sebelum memutuskan. Jika tabelnya lebih mirip halaman statistik biasa, keduanya bisa dianggap saling menggantikan pada aspek ini.

Lisensinya

LibraryLicencePackagesDisk
html2textGPL-3.0-or-later10,2 MiB
markdownifyMIT51,8 MiB
turndownMIT3 (npm)8,8 MiB

Referensi resmi: html2text di PyPI.

Dikonfirmasi di tiga tempat: metadata PyPI, repositori GitHub, dan file METADATA milik paket yang terinstal, yang menuliskan License-Expression: GPL-3.0-or-later.

Maknanya bergantung pada bagaimana software tersebut diintegrasikan, didistribusikan, dan disalurkan. Penggunaan internal atau hanya via jaringan biasanya berbeda dari skenario GPL ketika software yang Anda kirim menyertakan atau menggabungkan paket ini, tetapi artikel ini bukan analisis hukum. Tim yang mendistribusikan software sebaiknya meminta penasihat hukum meninjau model integrasi dan distribusi yang spesifik.

Bagian yang canggung adalah korelasinya. Library dengan jejak paling kecil, yang biasanya justru Anda pilih karena ingin menjaga artefak distribusi tetap ramping, adalah library dengan lisensi yang paling membatasi distribusi. Kedua alternatifnya memakai MIT.

Saya bukan pengacara dan ini bukan nasihat hukum — ini hanya fakta, dengan sumber, karena ini adalah properti yang paling mungkin relevan dan paling kecil kemungkinannya muncul di tabel perbandingan.

Pemeliharaan

Rilis terakhir 2025.4.15, push terakhir di repositori pada Oktober 2025 — kira-kira sepuluh bulan sebelum pengujian, dengan 41 rilis di belakangnya. requires_python >= 3.9, dan paket ini terpasang serta berjalan mulus di Python 3.14.2.

Ini lebih tenang daripada markdownify (rilis terakhir enam minggu sebelum pengujian) dan turndown (empat bulan), namun jelas masih aktif dibanding tidak ada aktivitas sama sekali. Untuk library yang mengonversi HTML ke teks — problem yang tidak banyak berubah — jeda sepuluh bulan lebih terasa stabil daripada terbengkalai. 95 issue terbuka adalah tanda yang lebih besar, dan layak Anda scan untuk mencari apa pun yang mirip dengan use case Anda sebelum memutuskan.

Memori, dan apa yang dilakukan HTML rusak terhadapnya

Ada dua pertanyaan operasional yang diukur terpisah di sini.

Konteks stress-test yang lebih luas ada di perbandingan memori dan HTML rusak untuk sepuluh library.

Peak resident memory, lewat /usr/bin/time -l, satu proses baru per sel — batas import adalah biaya library saat dimuat dan diam, sedangkan puncaknya termasuk dokumen.

LibraryRuntimeImport floor226 KB peak10 MB peak
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. Baseline Python dan Node tidak bisa dibandingkan langsung satu sama lain; interpreter ada di keduanya.

html2text adalah entri paling ringan di sini pada kedua sumbu yang diukur. Import floor 18,7 MiB dan puncak 71,2 MiB pada fixture 10 MiB menghasilkan RSS tambahan 52,5 MiB: (71,2 - 18,7) / 10 = 5,25× ukuran fixture. Bandingkan dengan baris absolut dan incremental di tabel, sambil tetap mengingat catatan baseline Python/Node di atas.

HTML rusak. Dua belas dokumen yang masing-masing merusak tepat satu hal — tag yang tidak ditutup, elemen inline yang salah nesting, atribut tanpa tanda kutip yang berisi spasi, penutup tag yang nyasar, tidak ada <html> sama sekali, atribut duplikat, dokumen terpotong di tengah tag, entity yang salah, <script> yang tidak ditutup, deklarasi charset yang berbohong, komentar yang berisi markup, dan nesting 600 tingkat — ditambah dua kontrol well-formed dengan ukuran yang cocok, karena "hasilnya kosong" hanya berarti sesuatu soal malformed jika library tersebut juga diam pada dokumen bersih dengan ukuran yang sama.

html2text melempar error pada 0 dari 14 dan tidak mengembalikan apa pun pada 0, sambil memulihkan 33/33 sentinel pada fixture yang rusak (malformed-results.json). Satu fixture dikecualikan dari hitungan itu: menurut HTML5, semua yang berada setelah <script> yang tidak ditutup memang isi script, jadi kehilangan bagian itu adalah perilaku yang benar dan memulihkannya justru deviasi.

Kelebihan dan kekurangan

Kelebihannya. Satu paket, 0,2 MiB, tanpa dependensi — jauh paling kecil dalam perbandingan ini. Output paling kecil dari keempatnya dan secara efektif imbang token dengan markdownify dan markitdown. Menghasilkan sintaks pipe-table yang mudah dikenali. Berjalan di Python 3.14. Garis keturunan proyeknya panjang dan stabil.

Kekurangannya. GPL-3.0-or-later, sementara alternatif lainnya tidak. body_width=78 secara default, yang membungkus output paksa dan mengubah hasil pengukuran atau diff kecuali dimatikan. Link yang dipertahankan paling sedikit (545 dibanding 598–611). Tabel memakai gaya tanpa outer pipe, yang membuat regex downstream yang naif gagal. 95 issue terbuka, dan laju rilisnya lebih tenang daripada markdownify.

Siapa yang sebaiknya memakai ini, dan siapa yang sebaiknya tidak

Pakai html2text kalau anggaran dependensi benar-benar ketat dan model integrasi serta distribusi yang Anda inginkan sudah lolos review lisensi. Satu paket tanpa dependensi adalah keuntungan operasional yang nyata: permukaan dependensi lebih kecil untuk diaudit dan dideploy.

Set body_width = 0 pada baris pertama, kecuali Anda memang ingin teks biasa yang dibungkus.

Lewati saja jika Anda mendistribusikan software dan copyleft menjadi masalah — markdownify memakai MIT, hasil tokennya seimbang di sini, dan match dengan markitdown pada tabel dengan disk 1,6 MiB lebih besar. Lewati juga jika preservation link penting bagi Anda, karena jumlah link yang dipertahankan paling sedikit. Dan lewati jika tooling downstream Anda mengasumsikan outer pipe pada baris tabel.

Di mana API terkelola masuk

html2text mengonversi HTML yang sudah Anda miliki. Ia tidak mengambil halaman, tidak merender JavaScript, dan tidak menangani lapisan anti-bot — tidak satu pun dari keempat converter ini melakukan itu, dan pada banyak target dunia nyata, itulah separuh pekerjaan yang lebih sulit.

Untuk fixture yang sama di kelima converter, lihat perbandingan HTML-ke-Markdown lima arah.

Layanan hosted untuk fetch/render/extraction, termasuk Thunderbit milik kami, bekerja di lapisan yang berbeda. Thunderbit tidak diuji dalam benchmark ini. Batas yang relevan adalah konversi HTML yang Anda berikan versus layanan yang mengambil dan memproses URL; artikel ini tidak menyajikan perbandingan kualitas, latensi, atau biaya dengan metrik yang sama.

Cara pandang yang adil: jika Anda sudah memegang HTML, ingin Markdown, dan GPL bukan masalah untuk cara Anda mendistribusikan, html2text itu gratis dan sangat kecil. Jika Anda perlu mengambil halaman, atau butuh baris data alih-alih prosa, itu pembelian yang berbeda.

Untuk lanskap yang lebih luas, roundup API web scraping kami membahas opsi hosted dan pillar open-source scraper membahas opsi self-hosted. Mengonversi HTML ke Markdown di Python adalah panduan praktiknya.

Coba Thunderbit untuk Ekstraksi Data Web

Perlukah Anda memakai html2text?

Ini kandidat yang kuat ketika footprint harus kecil, wrapping sengaja dimatikan, dan model distribusi Anda lolos review lisensi.

Jumlah tokennya berada dalam selisih 1,3% dari markdownify dan markitdown pada suite empat halaman. Itu tidak berarti kualitas keseluruhan setara: html2text mempertahankan lebih sedikit link dan lebih sedikit baris pada fixture Wikipedia yang tidak beraturan. Dua detail operasional perlu langsung diperhatikan: body_width = 0, dan gaya tabel tanpa outer pipe.

Jika review GPL membuatnya gugur, markdownify memakai MIT, punya ukuran output dan token count yang mirip di sini, mempertahankan lebih banyak link dan baris tabel tidak beraturan, serta memakai disk 1,6 MiB lebih besar di lingkungan ini.

Coba Thunderbit untuk Ekstraksi Data Web Get Started Free

FAQ

Apakah html2text bisa mengonversi tabel? Ya. Penghitung pertama saya sempat menyimpulkan bahwa ia menghasilkan satu baris tabel dari lima file, dan itu salah — karena saya mensyaratkan pipe di awal dan akhir, padahal html2text mengeluarkan Team Name | Year | Wins tanpa itu. Itu tetap Markdown pipe-table yang sah, walau harness ini tidak menjalankan uji kompatibilitas lintas renderer. Dengan penghitung yang sudah diperbaiki, html2text menghasilkan 32 baris dibanding 36 milik markdownify dalam suite empat halaman, dan 91 dibanding 98 ketika fixture tabel kompleks terpisah ikut dihitung.

Apa fungsi body_width, dan kenapa harus diubah? Secara default, ia membungkus output paksa pada 78 karakter — pilihan yang masuk akal untuk teks biasa yang dibaca di terminal, tetapi buruk untuk yang lain. Wrapping akan menyisipkan newline di tengah kalimat, memutus URL panjang, dan mengubah tokenisasi. Semua angka dalam ulasan ini memakai body_width = 0; dengan default, semuanya akan berbeda.

Apakah lisensi GPL benar-benar jadi batasan? Tergantung model integrasi dan distribusi yang tepat. Penggunaan internal atau hanya via jaringan dan distribusi software adalah skenario penilaian yang berbeda, tetapi artikel ini tidak menentukan hasil hukumnya. Tim yang merilis software sebaiknya meminta penasihat hukum meninjau ketentuan GPL-3.0-or-later; markdownify dan turndown memakai MIT. Ekspresi lisensi html2text dikonfirmasi di metadata PyPI, GitHub, dan file METADATA paket yang terinstal.

Apakah rilis dari April 2025 itu masalah? Kemungkinan besar tidak, jika dilihat sendiri. Konversi HTML ke teks adalah problem yang stabil, library ini terpasang dan berjalan bersih di Python 3.14.2, dan ada 41 rilis di belakangnya. 95 issue terbuka adalah angka yang justru akan saya cek — scan isu-isu itu untuk mencari sesuatu yang mirip dengan input Anda sebelum memutuskan, karena repositori yang tenang bisa berarti Anda sendiri yang akan memperbaikinya.

Apa yang tidak diuji di sini? Empat fixture konversi dan satu fixture tabel kompleks terpisah masih merupakan suite yang kecil. Pengujian memang mencakup dua belas dokumen sintetis yang rusak ditambah dua kontrol: html2text melempar error 0/14, mengembalikan output kosong 0/14, dan memulihkan semua 33 sentinel yang dinilai. Pengujian ini tidak mencakup halaman dunia nyata yang rusak, pola malformed yang lebih luas, nested list, definition list, footnote, atau matematika. Seluruh opsi yang tersedia — ignore_links, ignore_images, unicode_snob, single_line_break, dan lainnya — dibiarkan pada default kecuali body_width. Selisih link teramati tetapi tidak didiagnosis, dan round-tripping Markdown tidak diuji.

Ke
Ke
CTO di Thunderbit | Senior Data Scientist & Expert ML Dengan pengalaman hampir satu dekade di bidang machine learning dan data science, Ke Shen adalah lulusan Columbia University dan mantan Senior Data Scientist di Walmart Labs. Dengan keahlian mendalam yang diakui sejawat dalam Python, R, Java, dan Statistik, ia membagikan wawasan teruji lapangan tentang bagaimana membawa algoritma AI yang kompleks dari teori ke arsitektur siap produksi.
Daftar isi
Thunderbit · Agen data web AI

Ekstrak data dari halaman apa pun dalam 1 klik

Dipercaya 250.000+ pengguna
tersedia paket gratis
Dari halaman web ke spreadsheet
Jelaskan kebutuhanmu — Agen AI Thunderbit akan men-scrape lalu mengekspor ke Excel, Google Sheets, Airtable, atau Notion. Gratis untuk memulai.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week