一個名為 Defuddle 的新 JavaScript 庫在開發者社群中引起關注,有望成為 Mozilla Readability 的潛在替代品,解決了網頁內容提取和 HTML 轉 Markdown 轉換方面的長期問題。Defuddle 由 Obsidian Web Clipper 背後的團隊建立,旨在從網頁中提取主要內容時提供更清潔、更一致的輸出。
Defuddle 打包選項:
- 核心包 (
defuddle
):用於瀏覽器的主要包,無依賴項 - 完整包 (
defuddle/full
):包含額外的數學方程解析功能 - Node.js 包 (
defuddle/node
):針對 Node.js 最佳化,使用 JSDOM,包含完整的數學和 Markdown 功能
社群強調現有工具的質量和可靠性問題
開發者們對當前網頁內容提取工具的侷限性直言不諱。許多人對 Mozilla Readability 過於保守感到沮喪,它在試圖識別主要文章文字時經常刪除有用的內容。社群討論顯示,雖然 Readability 仍在積極維護並有最新更新,但其底層方法存在影響實際使用的根本缺陷。
一個特別值得注意的問題涉及特定語言的格式問題,包含荷蘭語或其他使用逗號而非句號表示數字的語言價格的頁面可能會混淆提取演算法。這些錯誤突出了為多樣化網頁內容維護一刀切解決方案的挑戰。
Defuddle 的多輪方法提供更好的內容恢復
與傳統提取工具不同,Defuddle 採用多輪檢測系統,能夠在初始嘗試返回無內容時進行恢復。這種方法使其能夠更寬容的同時仍保持準確性。該庫還使用創新技術,如分析頁面的移動端樣式來識別可以安全隱藏或刪除的元素。
該工具透過標準化輸出格式超越了簡單的內容提取。腳註、程式碼塊和數學方程式都被轉換為一致的 HTML 結構,使結果更適合下游處理,如 Markdown 轉換。
主要配置選項:
debug
:啟用詳細日誌記錄並保留 HTML 屬性markdown
:將內容轉換為 Markdown 格式separateMarkdown
:保留 HTML 內容並返回單獨的 Markdown 版本removeExactSelectors
:移除與廣告/社交媒體選擇器完全匹配的元素(預設:true)removePartialSelectors
:移除與廣告/社交媒體選擇器部分匹配的元素(預設:true)
在實際應用中表現強勁
來自 Obsidian Web Clipper 使用者的社群反饋特別積極,許多人稱讚 Markdown 提取質量的可靠性。該工具已在各種用例中證明有效,從構建知識庫到為 AI 語言模型建立清潔的網頁上下文。
「Markdown 提取質量是我見過的最可靠的。」
該庫處理複雜內容型別的能力,包括透過 MathML 轉換的數學方程式和標準化腳註格式,使其在簡單提取工具中脫穎而出。
標準化輸出格式:
- 標題:如果第一個 H1/H2 與標題匹配則刪除,H1 轉換為 H2
- 程式碼塊:使用語言資料屬性進行標準化:
<code data-lang="js" class="language-js">
- 腳註:採用帶編號引用和反向連結的一致格式
- 數學公式:轉換為帶 LaTeX 資料屬性的標準 MathML
替代解決方案獲得認可
討論還引起了對內容提取領域其他強大替代方案的關注。Python 開發者發現 Trafilatura 很成功,它提供可比較的提取質量和準確的元資料提取。對於 Go 開發者,有 Readability 和 Trafilatura 的積極維護移植版本可用,為不同程式語言提供選擇。
這些替代方案表明人們越來越認識到網頁內容提取需求已經超越了傳統工具所能提供的範圍,推動了多個程式設計生態系統的創新。
Defuddle 代表了網頁內容提取技術的重大進步,解決了開發者日常面臨的實際問題。它對標準化輸出和多輪檢測的關注使其對需要從日益複雜的現代網頁環境中進行可靠、清潔內容提取的應用程式特別有價值。
參考:Defuddle