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

Java 使用 JSoup 解析 HTML 完全指南:從字串、URL 到本地檔案的三種實戰範例

     編輯:Java 相關知識

為什麼選 JSoup?

JDK 核心庫缺乏 HTML 解析器,JSoup 填補這一空白:

  • 支援 DOM、CSS 選擇器、jQuery 風格 API
  • 符合 WHATWG HTML5 標準,解析結果與瀏覽器一致
  • 極強容錯性:自動修補未閉合標籤、隱式標籤、斷裂結構
  • 內建 XSS 防護白名單,安全輸出用戶內容
  • 可輸出整齊格式化 HTML

核心類別速覽

  • Jsoup:靜態工廠方法 parse()、connect()
  • Document:代表整份文件,繼承 Element
  • Element:標籤元素,提供 select()、attr()、text() 等
  • Node / TextNode:樹節點基類

三種常見解析來源

1. 解析 HTML 字串

String html = "JSoup Example"
            + "

HelloWorld

"; Document doc = Jsoup.parse(html); String title = doc.title(); // "JSoup Example" String h1 = doc.body().select("h1").text(); // "HelloWorld"

2. 從 URL 直接抓取並解析

Document doc = Jsoup.connect("https://www.google.com/")
                    .userAgent("Mozilla/5.0")
                    .timeout(5000)
                    .get();
String title = doc.title();  // "Google"

connect() 返回 Connection,支援 Header、Cookie、Proxy、POST 表單等完整 HTTP 功能。

3. 解析本地 HTML 檔案

File input = new File("login.html");
Document doc = Jsoup.parse(input, "UTF-8", "");  // 第三參數為 baseUri,空字串即可

String title = doc.title();                     // "Login Page"
Element div = doc.getElementById("login");
String cssClass = div.className();              // "simple"
String formAction = div.select("form").attr("action"); // "login.do"

實戰範例:登入頁面表單解析

假設 login.html 結構如下:

<div id="login" class="simple">
  <form action="login.do">
    Username: <input id="username" type="text" /><br>
    Password: <input id="password" type="password" /><br>
    <input id="submit" type="submit" />
    <input id="reset" type="reset" />
  </form>
</div>

提取關鍵資訊:

Element form = doc.select("form").first();
String action = form.attr("action");           // login.do
String method = form.attr("method");           // 空則預設 GET

Elements inputs = form.select("input");
for (Element input : inputs) {
    String id = input.id();
    String type = input.attr("type");
    System.out.printf("Input: id=%s, type=%s%n", id, type);
}
// 輸出:
// Input: id=username, type=text
// Input: id=password, type=password
// Input: id=submit, type=submit
// Input: id=reset, type=reset

進階技巧

需求API 範例
CSS 選擇器查找doc.select("div.content > p:first-child")
屬性存在性判斷element.hasAttr("href")
修改 HTMLelement.attr("class", "new-class").text("新文字")
輸出整齊 HTMLdoc.html() 或 doc.outerHtml()
清理用戶輸入防 XSSJsoup.clean(userHtml, Safelist.basic())

常見坑點提醒

  • 編碼問題:本地檔案指定正確 charset(如 ISO-8859-1、UTF-8),URL 抓取通常自動偵測 Content-Type。
  • baseUri:Jsoup.parse(html, baseUri) 影響相對連結解析,抓取網頁時自動設為目標 URL。
  • 大量文件效能:JSoup 為單執行緒 DOM 解析器,超大文件(>10MB)建議改用 SAX 模式或分批處理。

結語

JSoup 以「強健、易用、功能全」成為 Java HTML 解析事實標準。無論是爬蟲抓取、內容提取、表單分析、還是用戶內容消毒,幾行代碼即可搞定。掌握 select() 選擇器與 attr()/text() 提取組合,能解決 95% 以上的 HTML 處理需求。

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