使用 Python 將 HTML 轉成 Markdown:最佳工具與實作技巧

最後更新於 August 19, 2026
使用 Python 將 HTML 轉成 Markdown:最佳工具與實作技巧

讓我跟你分享一個故事。幾年前,我正埋頭處理一個專案,內容是整理成千上萬個網頁——想像一下雜亂的 HTML、內嵌樣式,還有多到數不清的 <div>。我的目標是什麼?把這些內容整理成乾淨、好讀的格式,提供給團隊內部的 wiki 使用,而那個 wiki 和許多現代工具一樣,是以 Markdown 為基礎。老實說,一開始我也試過老派的「複製、貼上、然後祈禱別出錯」做法。但在喝到第三杯咖啡、修到第五個壞掉的表格之後,我就知道,肯定有更好的方法。

HTML to Markdown power.png

事實證明,我不是唯一有這種困擾的人。不管你是在撰寫文件、準備 AI 模型的訓練資料,還是只是想讓筆記看起來不要像一盤義大利肉醬麵,而是像一份井然有序的採買清單,把 HTML 轉成 Markdown,都是每位商務使用者都該具備的超能力。而 Python 呢?它就是這項任務的瑞士刀——上手容易、彈性高,而且有一整套函式庫,讓整個過程(幾乎)變得有趣。在這篇指南裡,我會帶你了解在 Python 中做 HTML 轉 Markdown 的原因、方法,以及那些「小心這個怪異邊角案例」的注意事項,並穿插大量實戰建議。

什麼是 HTML 轉 Markdown?

先把概念拆開來看:HTML(HyperText Markup Language,超文字標記語言)是驅動網頁的基礎。它很適合瀏覽器,但如果你想直接閱讀或編輯內容,就沒那麼友善了——除非你很享受解讀滿滿尖括號的牆。Markdown 則是一種輕量、純文字的格式語法,讀寫都很直覺。你不需要寫 <h1>Title</h1>,只要輸入 # Title;不需要寫 <strong>bold</strong>,只要寫 **bold**。它的可讀性高到連非技術同事都能直接上手、一起協作。

將 HTML 轉成 Markdown,就是把所有 HTML 標籤轉換成對應的 Markdown 語法。例如:

<h1>This is a Heading</h1>
<p>This is a paragraph with <strong>bold</strong> and <em>italic</em> text.</p>
<a href="https://example.com">This is a link</a>

會變成:

# This is a Heading

This is a paragraph with **bold** and *italic* text.

[This is a link](https://example.com)

這個過程其實正好和 Markdown 最初的設計方向相反(Markdown → HTML),但現在它已經成為現代工作流程的必備能力——尤其是隨著 Markdown 在商務與技術團隊中的普及度持續上升時,更是如此(Google Developer Docs)。

順帶一提,如果你之後需要反向處理(Markdown 轉 HTML),Python 一樣能輕鬆搞定。但那是後面的事了。

為什麼要把 HTML 轉成 Markdown?商務上的核心價值

那麼,為什麼要費心把 HTML 轉成 Markdown 呢?簡單說:Markdown 更乾淨、更好讀,也更容易管理。但我們來講得更具體一點。這種轉換可以怎麼強化你的工作流程:

使用情境為什麼要轉成 Markdown?
技術文件Markdown 檔案是純文字,特別適合版本控制、協作與快速編輯。再也不用為了零星的 <div> 標籤而頻繁發生合併衝突了(Document360)。
筆記與知識庫Markdown 即使直接看原始內容也很容易閱讀,能在 Notion、Obsidian 等應用之間自由移轉,而且不會被任何專有格式綁住(Markdown Guide)。
內容遷移要把舊 HTML(像是老部落格、內網頁面)搬到新系統嗎?Markdown 能讓遷移過程更順暢,內容也更容易後續更新(cantoni.org)。
AI 訓練資料準備LLM 和 NLP 模型特別偏好乾淨、有結構的文字。Markdown 能去掉 HTML 的雜訊,留下更適合模型處理的內容(Apify)。
內容編輯與協作Markdown 語法對非開發者來說也很直覺,不會再出現「等等,這個 <span> 到底哪裡結束?」這種崩潰時刻。它具備前瞻性,而且在任何文字編輯器裡都很好維護(Markdown Guide)。

順便分享一個有趣的事實:Markdown 之所以能成為 README 檔與內部 wiki 的預設格式,很大一部分就是因為它夠簡單(Google Developer Docs)。它可以說是「寫一次,到處能用」的格式。

Python 有哪些 HTML 轉 Markdown 工具?

Python 一直是我處理這類文字整理工作的首選語言,它在 HTML 轉 Markdown 這件事上也有非常完整的生態系。下面是幾個主要選擇:

工具 / 函式庫類型優勢限制 / 備註
markdownifyPython 函式庫好上手、可自訂、能保留結構(標題、表格、圖片、連結)、可擴充遇到某些棘手 HTML 可能會略過部分內容,且需要 BeautifulSoup
html2textPython 函式庫簡單、對格式不良的 HTML 很耐受、輸出精簡、具備多種忽略選項表格可能被壓平,進階格式控制較少
Pandoc獨立工具(可搭配 Python wrapper)可處理複雜 HTML,支援多種 Markdown 變體,適合批次作業需另外安裝,小任務時可能顯得過於大材小用
Aspose.HTML for Python via .NET商業版 Python/.NET 函式庫企業級功能,支援 Markdown 變體,提供進階選項需要付費授權,安裝與設定較繁複

接下來我們再把這些工具拆開來看看。

Python 函式庫比較:哪一個最適合你?

markdownify

  • 最適合: 大多數商務使用者、文件撰寫、以及你希望 Markdown 輸出盡量接近原始 HTML 的情況。
  • 優點: API 簡單、可自訂(例如選擇標題樣式、移除標籤),可處理圖片、連結、表格(GitHub)。
  • 缺點: 如果 HTML 巢狀太深或結構特殊,可能漏掉部分內容(Reddit)。

html2text

  • 最適合: 快速轉換、從凌亂網頁中萃取可讀文字、以及你想優先要簡潔而非完整結構的情境。
  • 優點: 能處理格式不良的 HTML、可輕鬆忽略連結/圖片、輸出風格精簡(GitHub)。
  • 缺點: 表格未必會以 Markdown 表格格式輸出,對輸出樣式的控制較少。

Pandoc

  • 最適合: 重度轉換、批次處理、複雜文件,或你需要特定 Markdown 變體的情境。
  • 優點: 幾乎什麼都能轉成什麼,支援擴充功能,能處理表格、註腳、數學公式(cantoni.org)。
  • 缺點: 需要另外安裝,通常透過命令列或 Python wrapper 呼叫。

Aspose.HTML for Python via .NET

  • 最適合: 企業環境、需要進階選項或要與其他 Aspose 工具整合的情況。
  • 優點: 支援多種 Markdown 變體,可自訂儲存選項(Aspose Docs)。
  • 缺點: 需要商業授權,設定流程也比較複雜。

我的建議: 對大多數日常需求來說,先從 markdownify 或 html2text 開始。如果遇到瓶頸(像是複雜表格、註腳,或你想要 GitHub Flavored Markdown),再請 Pandoc 出馬。

逐步教學:用 Python 將 HTML 轉成 Markdown

接下來我們來點實作。即使你不是開發者,也能照著做。下面我會示範兩個範例:一個用 markdownify,一個用 html2text。

範例:使用 markdownify 將 HTML 轉成 Markdown

先安裝函式庫:

pip install markdownify

假設你有這段 HTML:

<h2>Example Title</h2>
<p>This is a <strong>bold</strong> word and an <em>italic</em> word.</p>
<p>Visit <a href="http://example.com">our site</a> for more info.</p>

Python 程式碼如下:

from markdownify import markdownify as md

html_content = """
<h2>Example Title</h2>
<p>This is a <strong>bold</strong> word and an <em>italic</em> word.</p>
<p>Visit <a href="http://example.com">our site</a> for more info.</p>
"""

markdown_text = md(html_content, heading_style="ATX")
print(markdown_text)

轉換後的 Markdown:

## Example Title

This is a **bold** word and an *italic* word.

Visit [our site](http://example.com) for more info.
  • 標題會變成 ##,粗體與斜體會被正確轉換,連結則會變成 [文字](網址)
  • 圖片(<img>)會變成 ![alt](url)
  • 表格會轉成 Markdown 表格(以直線與破折號表示)。

你也可以調整 markdownify 的行為。例如,要移除 <style><script> 標籤:

markdown_text = md(html_content, strip=['style', 'script'])

如果有更進階的需求,你甚至可以繼承轉換器來處理自訂標籤(GitHub Docs)。

範例:使用 html2text 進行 HTML 轉 Markdown

先安裝函式庫:

pip install html2text

以下使用和前面相同的 HTML:

import html2text

html_content = """
<h2>Example Title</h2>
<p>This is a <b>bold</b> word and an <i>italic</i> word.</p>
<p>Visit <a href="http://example.com">our site</a> for more info.</p>
"""

converter = html2text.HTML2Text()
converter.ignore_links = False  # 保留連結
markdown_text = converter.handle(html_content)
print(markdown_text)

轉換後的 Markdown:

## Example Title

This is **bold** word and an *italic* word.

Visit [our site](http://example.com) for more info.
  • html2text 預設會將每行限制在 78 個字元內(你可以設定 converter.body_width = 0 來取消自動換行)。
  • 你可以忽略圖片(converter.ignore_images = True),或讓連結以引用方式輸出。
  • 表格未必會轉成 Markdown 表格——如果你的內容很重視表格,務必先測試。

進階設定:自訂 HTML 轉 Markdown 的方式

有時候你需要的不只是單純轉換。也許你想排除某些 HTML 標籤、處理內嵌樣式,或是指定特定 Markdown 變體(像 GitHub Flavored Markdown)。

排除或轉換特定 HTML 元素

  • markdownify: 使用 strip 參數移除標籤,或繼承轉換器來處理自訂內容(GitHub)。
  • html2text: 使用忽略旗標(ignore_linksignore_images)。如果要做更複雜的篩選,可以先用 BeautifulSoup 預處理 HTML。
  • Pandoc: 使用命令列參數或 filter 來控制轉換結果。
  • Aspose: 設定儲存選項,以選擇 Markdown 變體(Aspose Docs)。

處理內嵌樣式與腳本

  • 大多數轉換器都會直接移除 <style><script> 標籤——Markdown 本來就不支援它們(Aspose Docs)。
  • 如果你需要保留程式碼片段,請確認它們被包在 <pre><code> 標籤中;這樣轉換器才會把它們變成 Markdown 程式碼區塊。

選擇 Markdown 變體

  • Pandoc: 可以指定輸出格式(例如 -to=gfm 代表 GitHub 風格,或 -to=commonmark 等)。
  • Aspose: 使用 MarkdownSaveOptions 來選擇變體。
  • markdownify: 沒有明確的變體支援,但你可以透過輸出調整來符合需求。

處理特殊情境

  • 嵌入式媒體: Markdown 不支援影片嵌入;通常只能保留連結或原始 HTML。
  • Base64 圖片: 有些轉換器會把 base64 資料直接放進 Markdown,檔案可能會變得非常大;較好的做法是把圖片抽出來,改成連結(Reddit)。
  • 複雜表格: 如果表格有合併儲存格或巢狀元素,Markdown 可能無法完整保留結構——記得測試並視情況調整。

處理圖片、連結與表格

圖片:

  • <img src="logo.png" alt="Logo"> 會變成 ![Logo](logo.png)
  • 如果你不想保留圖片,可使用 ignore_imagesstrip=['img']

連結:

  • <a href="url">text</a> 會變成 [text](url)
  • 內嵌式與引用式:markdownify 採用內嵌式;html2text 可以用引用式。
  • 如果是 AI 訓練資料,你可能會想移除 URL,只保留錨點文字。

表格:

  • markdownify 和 Pandoc 會把 HTML 表格轉成 Markdown 表格(用直線與破折號)。
  • html2text 則可能把表格輸出成純文字。
  • 若表格較複雜,請先檢查輸出結果,再做必要調整。

反向操作:用 Python 將 Markdown 轉回 HTML

有時你也需要把 Markdown 轉回 HTML,例如要把內容顯示在網站上。Python 也能輕鬆做到。

使用 Python-Markdown:

import markdown

md_text = "# Hello\nThis is **Markdown**."
html_output = markdown.markdown(md_text)
print(html_output)

結果:

<h1>Hello</h1>
<p>This is <strong>Markdown</strong>.</p>

其他選項還包括 Mistune 和 markdown2。當然,Pandoc 也可以雙向轉換。

HTML 轉 Markdown 的限制與最佳實務

老實說:HTML 轉 Markdown 並不是百分之百完美。以下是你要注意的地方,以及如何把結果做得最好。

限制

  • 不是所有內容都能順利轉換: 腳本、樣式、表單與互動元素通常會被移除(Aspose Docs)。
  • 需要人工清理: 有時你還是得手動整理 Markdown 輸出,例如修正換行、調整表格或清掉殘留 HTML。
  • Markdown 變體差異: 不同的 Markdown 渲染器支援功能不完全相同(例如表格、註腳),所以要在目標環境中先測試。

最佳實務

  • 先清理 HTML: 先用 BeautifulSoup 或 readability 類工具,把你真正需要的內容萃取出來(cantoni.org)。
  • 大型專案自動化: 寫一支腳本批次轉檔,並整合到你的網頁爬取或文件流程中。
  • 反覆測試與調整: 先拿一小部分樣本測試,確認 Markdown 在目標工具中的呈現,再依結果調整流程。
  • 優雅處理錯誤: 如果遇到格式不良的 HTML,先做 sanitizer 清理再轉換。

結語與重點整理

不管你是在製作文件、準備 AI 訓練資料,或只是想讓筆記不要那麼……粗糙,把 HTML 轉成 Markdown,都是一項實用又高影響力的技能。重點回顧如下:

Conclusion & Key Takeaways.png

  • 為什麼重要: 相較於 HTML,Markdown 更乾淨、更好讀,也更容易維護。它已經成為現代文件與筆記的通用語言(Markdown Guide)。
  • 最佳工具: 對大多數使用者而言,先從 markdownify 或 html2text 開始;若是複雜任務,Pandoc 就是你的重型工具。若需要企業級功能,也可以考慮 Aspose。
  • 怎麼做: 安裝你選定的函式庫,跑一個簡單腳本,就能得到乾淨的 Markdown 輸出。需要的話再進一步自訂。
  • 限制: 某些情況還是需要人工整理,而且不是所有 HTML 功能都有對應的 Markdown 寫法。
  • 下一步: 把文中的範例程式碼套到你自己的 HTML 上。批次轉換舊網頁。把轉換流程整合進你的商務工作流。若你想更進一步,也可以探索 Pandoc 的進階功能,或 Python-Markdown 的擴充套件。

Markdown 的核心價值,就是讓內容更可攜、更好讀,也更有未來性。有了 Python 和正確工具,你甚至能把最亂的 HTML 變成團隊,甚至未來的自己,都會感謝你的成果。

祝你轉換順利!如果你想看更多自動化技巧、AI 驅動的資料擷取,或只是想一起研究資料流程,歡迎到 Thunderbit Blog 看更多實戰指南與幕後故事。

常見問題

1. 對商務使用者來說,把 HTML 轉成 Markdown 有哪些好處?

把 HTML 轉成 Markdown,可以提升內容可讀性、可攜性與維護性。對文件、筆記、AI 訓練資料,以及將舊內容遷移到支援 Markdown 的現代工具時,尤其有幫助。

2. 哪些 Python 工具最適合做 HTML 轉 Markdown?

常見工具包括 markdownify(適合結構化輸出)、html2text(適合快速、乾淨的轉換)、Pandoc(適合複雜文件)、以及 Aspose.HTML(企業級商業方案)。

3. 我要怎麼用 Python 把 HTML 轉成 Markdown?

你可以使用像 markdownifyhtml2text 這類函式庫。先用 pip 安裝,再把 HTML 內容丟進去,工具就會回傳 Markdown。每個函式庫都提供不同的自訂選項,例如移除標籤或調整輸出格式。

4. HTML 轉 Markdown 有哪些限制?

有。像腳本、表單這類互動元素通常無法完整轉換,複雜表格或嵌入媒體也可能需要手動修正。另外,不同 Markdown 變體之間也有些微差異,會影響渲染結果。

5. 我可以用 Python 把 Markdown 轉回 HTML 嗎?

可以。像 markdownmistunemarkdown2 這些函式庫都能把 Markdown 渲染成 HTML,很方便整合到網站或其他 HTML 系統中。

延伸閱讀:

Shuai Guan
Shuai Guan
Thunderbit 執行長|AI 資料自動化專家 Shuai Guan 是 Thunderbit 的執行長,畢業於密西根大學工程學院。憑藉近十年在科技與 SaaS 架構領域的經驗,他專注於把複雜的 AI 模型轉化為實用、免程式碼的資料擷取工具。在這個部落格中,他分享經過實戰驗證、毫無保留的網頁爬取與自動化策略見解,幫助你打造更聰明、以數據驅動的工作流程。當他不在優化資料流程時,也會把同樣的細膩與專注投入到攝影興趣中。
Topics
Html To MarkdownConvert Html To MarkdownPython Markdown To Html
目錄
Thunderbit · AI 網頁資料代理

1 次點擊 內擷取任何頁面的資料

深受 250,000+ 用戶信賴
提供免費方案
從網頁到試算表
描述你需要的內容——Thunderbit 的 AI 代理會幫你爬取,並匯出到 Excel、Google Sheets、Airtable 或 Notion。免費即可開始。
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week