JDK 核心庫缺乏 HTML 解析器,JSoup 填補這一空白:
Jsoup:靜態工廠方法 parse()、connect()Document:代表整份文件,繼承 ElementElement:標籤元素,提供 select()、attr()、text() 等Node / TextNode:樹節點基類String html = "JSoup Example "
+ "HelloWorld
";
Document doc = Jsoup.parse(html);
String title = doc.title(); // "JSoup Example"
String h1 = doc.body().select("h1").text(); // "HelloWorld"
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 功能。
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") |
| 修改 HTML | element.attr("class", "new-class").text("新文字") |
| 輸出整齊 HTML | doc.html() 或 doc.outerHtml() |
| 清理用戶輸入防 XSS | Jsoup.clean(userHtml, Safelist.basic()) |
Jsoup.parse(html, baseUri) 影響相對連結解析,抓取網頁時自動設為目標 URL。JSoup 以「強健、易用、功能全」成為 Java HTML 解析事實標準。無論是爬蟲抓取、內容提取、表單分析、還是用戶內容消毒,幾行代碼即可搞定。掌握 select() 選擇器與 attr()/text() 提取組合,能解決 95% 以上的 HTML 處理需求。