網頁爬蟲、內容分析、關鍵字提取常需「去標籤化」。HTMLParser(舊版 org.htmlparser)提供節點遍歷、XPath 風格過濾、編碼處理,適合輕量級解析任務。本範例展示:抓取遠端 HTML → 全節點遍歷 → toPlainTextString() 輸出純文字。
HttpURLConnection 取得 InputStream,用 BufferedReader 逐行讀入 String(注意編碼)。Parser.createParser(htmlString, "GBK") 指定編碼,避免中文亂碼。parser.extractAllNodesThatMatch(new NodeFilter() { public boolean accept(Node n) { return true; } }) 取得 NodeList。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
現代替代方案對比
庫 優點 缺點 適用場景
Jsoup jQuery 風格選擇器、DOM 操作、自動修正不合法 HTML、活躍維護 體積較大(~300KB) 首選,現代標準
HTMLParser 輕量、流式 SAX 風格、記憶體友善 停止維護多年、HTML5 支援弱 舊專案維護、極簡依賴
Jericho 保留原始格式、支援 Server-side 標籤 API 較複雜 需保留原始標籤結構
編碼處理提醒
範例強制用 GBK,實際應優先從 Content-Type 標頭或 <meta charset> 解析編碼,或用 CharsetDetector(ICU4J)自動偵測。
- 上一篇文章: Java for-each 迴圈兩大隱藏坑:Iterable 契約與 ConcurrentModificationException
- 下一篇文章: Java 陣列找第二大元素:單趟掃描雙變量法完整實作
Copyright © 程式碼之家 All Rights Reserved