Trafilatura:把網頁 HTML 變成乾淨文字與結構化資料的 Python 工具
Python & Command-line tool to gather text and metadata on the Web: Crawling, scraping, extraction, output as CSV, JSON, HTML, MD, TXT, XML
秒懂
- 它是什麼?
- Trafilatura 是一套以 Python 與命令列介面運作的網頁文字擷取工具,涵蓋爬蟲、下載、正文萃取與多格式輸出。本文檢視它的運作機制、使用方式、限制與適用場景。
- 適合誰用?
- Trafilatura 適合需要大量從網頁取得乾淨正文的研究者、NLP 工程師與 RAG 管線開發者,它把爬蟲發現、下載、萃取與格式轉換收進同一個套件,省去自行拼接多個函式庫的麻煩。若你的需求只是偶爾抓取單一頁面,或高度依賴 JavaScript 渲染的網站,它可能不是最合適的選擇,因為它的萃取邏輯以靜態 HTML 為主。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 4 天前。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它解決的是哪一種麻煩
從網頁抓正文,表面上是把 HTML 標籤剝掉,實際上是另一回事。同一個網站裡,導覽列、頁尾、推薦文章、廣告區塊,樣樣都跟本文混在一起。不同網站又各有各的結構,寫死的 CSS 選擇器換個網站就失效。Trafilatura 想解決的,正是這種「從任意網頁取出主要文字與中繼資料」的重複勞動。它的目標讀者很明確:要做語料庫、訓練 NLP 模型、餵給 RAG 管線,或者經營新聞聚合服務的人。這類工作通常需要處理成千上萬個頁面,手動清理不可行,需要一個能批次運作、輸出格式統一、又不要求架設資料庫的工具。README 開頭就點明,它不依賴資料庫,輸出可直接轉成 CSV、JSON、Markdown、XML 等格式。這意味著它刻意保持輕量,把「擷取」這件事做好,而不是變成一個完整的爬蟲平台。
從 URL 到文字:內部的處理路徑
Trafilatura 的設計可以拆成三個階段:發現、下載、萃取。發現層支援 sitemap(TXT 與 XML)以及 feed(ATOM、JSON、RSS),並且內建 URL 過濾與去重。下載層處理即時 URL,號稱對下載佇列有「禮貌且有效率」的處理,同時也接受已經存成 HTML 檔案或已解析的 HTML 樹。萃取層是它的核心,README 說明這是「自家的規則式萃取器」,並以 jusText 與 readability-lxml 作為備援方案。規則式萃取器意味著它不靠機器學習模型,而是依賴一組針對 HTML 結構、文字密度、區塊屬性所設計的啟發式規則。它會辨識段落、標題、清單、引言、程式碼與行內格式,並可選擇是否納入留言、連結、圖片與表格。輸出格式由同一份萃取結果轉換,所以從 TXT 換成 JSON 時,不需要重新抓取或重新解析。值得一提的是,它也能輸出 XML-TEI,這是人文與語言研究常用的標準格式,呼應了它源自博士論文的背景。
實際跑起來:命令列與 Python 呼叫
安裝方式與一般 Python 套件相同,透過 pip 安裝 trafilatura 即可。命令列介面提供最直接的操作。假設你手上有個網址,想要純文字輸出,指令大致是 trafilatura -u <網址>,若要指定輸出格式,可以加上 -o json 或 -o csv 之類的參數。Python 端則更簡潔,README 的範例是這樣:先 from trafilatura import fetch_url, extract,然後用 fetch_url 下載頁面,再把下載結果丟給 extract,就能得到純文字。想要 JSON 與中繼資料,就在 extract 加上 output_format="json" 與 with_metadata=True。這個範例同時展示了兩個重點:一是 fetch_url 與 extract 是分開的函式,代表你可以自行控制下載階段,例如餵入先前存好的 HTML;二是中繼資料的擷取是選項,不是預設行為。文件還提到可透過 Python 處理已解析的 HTML 樹,這對已經用其他爬蟲框架(例如 Scrapy)取得頁面的使用者來說,可以無縫接軌,只把萃取階段交給 Trafilatura。
精準與召回之間的取捨
任何正文萃取器都必須面對一個基本矛盾:抓得太寬,會把頁尾的版權聲明也當成正文;抓得太窄,又會漏掉訪談中的問答、文章末段的註解。README 明說 Trafilatura 的萃取器「在限制雜訊(精準度)與納入所有有效部分(召回率)之間取得平衡」。這句話聽起來像行銷詞,但實際上是規則式萃取器的核心設計哲學。它不像某些現代工具那樣用 DOM 距離或機器學習分數來決定區塊的重要性,而是靠一組預先定義的 HTML 模式與文字統計。這帶來一個實際後果:對結構極端或新穎的頁面,它的表現可能不如針對該站台寫死的腳本。備援機制(jusText 與 readability-lxml)的存在,暗示單一萃取器無法涵蓋所有情況,遇到失敗時會切換到其他演算法。但這也代表行為可能因頁面而異,除錯時需要知道目前是哪個萃取器在運作,文件並未明說如何從輸出中得知這一點,實務上可能需要自己加日誌。
效能宣稱與第三方評測的距離
Trafilatura 的文件引用多份外部評測,包括 ScrapingHub 的 article-extraction-benchmark、Lejeune 與 Barbaresi 2020 年的報告,以及 Bevendorff 等人 2023 年的論文。這些評測的結論不一,但 README 摘要它們時,都指向 Trafilatura 在開源函式庫中表現領先。值得注意的是,評測本身有各自的衡量標準:ScrapingHub 的基準偏重效率與正確性的綜合分數,Bevendorff 的評比則用 ROUGE-LSum 的 F1 分數來衡量萃取結果與人工摘要的吻合度。這些數字不能直接互相比較,也不能保證在你的語料上有一樣的效果。文件也提供了 evaluation 的說明文件與測試資料夾,讓使用者自行重跑評測。這比單方面相信 README 的宣稱要踏實,因為網頁結構會隨時間改變,五年前的最佳工具,今天可能因為主流 CMS 改版而失準。若你打算把 Trafilatura 用在特定領域的網站群,最好自己抽樣比對萃取結果與人工標註。
授權轉變與維護成本
授權是採用開源軟體時必須檢查的項目。Trafilatura 目前以 Apache-2.0 釋出,但 README 特別註明「v1.8.0 之前的版本採用 GPLv3+ 授權」。這代表如果你從舊版升級,授權義務會改變;Apache-2.0 比 GPL 更寬鬆,允許在專有軟體中以較少的條件使用,但若你依賴的是舊版程式碼,仍受 GPL 約束。這不是法律建議,只是提醒你檢查自己鎖定的版本。維護方面,專案最後一次 push 是 2026 年 8 月,近期釋出 v2.2.0、v2.1.0 與 v2.0.0,顯示仍有持續開發。v2.0.0 在 2024 年 12 月釋出,代表從 v1.x 到 v2.x 有過一次大版本更新,升級時需要留意 API 是否向後相容。README 提到作者尋求贊助,也說明這個專案「未來取決於社群支持」,這是開源專案常見的現實,但它同時也累積了大量依賴者,包括 HuggingFace、IBM、Microsoft Research 等機構,這至少代表它被放進許多生產管線中,不是只停留在個人實驗。
替代方案與適用邊界
Trafilatura 並非唯一選擇。常見的替代品包括 readability-lxml 與 jusText,而這兩個函式庫其實被 Trafilatura 當作備援方案,代表它們的萃取能力被視為可互換。readability-lxml 源自 Firefox 的閱讀模式演算法,專注於找出主要文章區塊,輸出較為簡單,中繼資料處理較弱。jusText 則以去除站台雜訊為目標,適合語言研究中的語料庫建立,但對結構化輸出(如 JSON 或 XML-TEI)的支援較少。Trafilatura 的差異在於它把發現、下載、萃取與多格式輸出整合在一套 API 中,並且支援 sitemap 與 feed 的批次處理,這是 readability 或 jusText 單獨做不到的。如果你的專案已經有穩定的爬蟲管線,只需要最後一哩的文字清理,那引入 Trafilatura 可能多餘,直接用 readability-lxml 會更輕。但如果你要從零開始建立一個新聞語料庫,需要定期從大量來源抓取並輸出成統一格式,Trafilatura 的整合性就值得考慮。它的邊界也很清楚:不處理 JavaScript 渲染的動態內容,因為它讀取的是下載後的 HTML,若目標網站仰賴瀏覽器執行腳本才產生正文,你得先搭配 headless browser 或類似工具,這會增加架構複雜度,文件並未提供內建支援。
編輯結論
Trafilatura 適合需要大量從網頁取得乾淨正文的研究者、NLP 工程師與 RAG 管線開發者,它把爬蟲發現、下載、萃取與格式轉換收進同一個套件,省去自行拼接多個函式庫的麻煩。若你的需求只是偶爾抓取單一頁面,或高度依賴 JavaScript 渲染的網站,它可能不是最合適的選擇,因為它的萃取邏輯以靜態 HTML 為主。採用前應先驗證三件事:目標網站是否在 sitemap 或 feed 中可被發現、回傳的正文是否包含你需要的注釋或表格(預設不輸出)、以及從 v1.8.0 起授權由 GPLv3+ 改為 Apache-2.0 是否符合你的散布政策。若這些條件都成立,Trafilatura 的規則式萃取器與多格式輸出,能讓你把網頁轉成語料庫的流程大幅簡化。
社群筆記