首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java HTMLParser 提取網頁純文字:從 URL 到乾淨文本的完整流程

     編輯:Java 相關知識

用 HTMLParser 快速剝離標籤、保留可讀內容

網頁爬蟲、內容分析、關鍵字提取常需「去標籤化」。HTMLParser(舊版 org.htmlparser)提供節點遍歷、XPath 風格過濾、編碼處理,適合輕量級解析任務。本範例展示:抓取遠端 HTML → 全節點遍歷 → toPlainTextString() 輸出純文字。

核心步驟

  1. 建立連線:HttpURLConnection 取得 InputStream,用 BufferedReader 逐行讀入 String(注意編碼)。
  2. 建立 Parser:Parser.createParser(htmlString, "GBK") 指定編碼,避免中文亂碼。
  3. 提取所有節點:parser.extractAllNodesThatMatch(new NodeFilter() { public boolean accept(Node n) { return true; } }) 取得 NodeList。
  4. 轉純文字:遍歷 NodeList,node.toPlainTextString() 自動遞歸提取子節點文字,拼接輸出。

關鍵程式碼

public static String extractText(String html) throws Exception {
    StringBuffer text = new StringBuffer();
    Parser parser = Parser.createParser(new String(html.getBytes(), "GBK"), "GBK");
    NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() {
        public boolean accept(Node node) { return true; }
    });
    for (int i = 0; i < nodes.size(); i++) {
        Node n = nodes.elementAt(i);
        text.append(new String(n.toPlainTextString().getBytes("GBK"))).append("\r\n");
    }
    return text.toString();
}

進階用法:定向提取

// 只解析  標籤
NodeFilter filter = new TagNameFilter("table");
NodeList tables = parser.extractAllNodesThatMatch(filter);
TableTag table = (TableTag) tables.elementAt(11); // 取第 12 個表格
// TableTag 提供 getRows(), getColumns(), getCellText() 等結構化 API

現代替代方案對比

庫優點缺點適用場景
JsoupjQuery 風格選擇器、DOM 操作、自動修正不合法 HTML、活躍維護體積較大(~300KB)首選,現代標準
HTMLParser輕量、流式 SAX 風格、記憶體友善停止維護多年、HTML5 支援弱舊專案維護、極簡依賴
Jericho保留原始格式、支援 Server-side 標籤API 較複雜需保留原始標籤結構

編碼處理提醒

範例強制用 GBK,實際應優先從 Content-Type 標頭或 <meta charset> 解析編碼,或用 CharsetDetector(ICU4J)自動偵測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved