Java利用Jsoup解析和操作HTML的技術(shù)指南
1、簡(jiǎn)述
在現(xiàn)代 Java 開發(fā)中,處理 HTML 數(shù)據(jù)是一項(xiàng)常見需求,無論是抓取網(wǎng)頁(yè)數(shù)據(jù)、解析 HTML 文檔,還是操作 DOM 樹,Jsoup 都是一個(gè)強(qiáng)大的工具。它是一個(gè)基于 Java 的 HTML 解析庫(kù),支持從 URL、文件或字符串中解析 HTML,提供類似于 jQuery 的 API,便于選擇和操作 DOM 元素。
本文將介紹 Jsoup 的基本功能,并通過多個(gè)詳細(xì)的代碼示例展示如何使用它解析和操作 HTML。
2、為什么選擇 Jsoup?
- 簡(jiǎn)單易用:API 設(shè)計(jì)友好,功能豐富。
- 強(qiáng)大的選擇器:支持 CSS 選擇器和 DOM 遍歷。
- 靈活的 HTML 操作:可以輕松修改 HTML。
- 兼容性強(qiáng):支持解析 HTML5 和寬松的 HTML。
- 高效:可以從 URL 快速抓取內(nèi)容。
在使用 Jsoup之前,需要添加其依賴。以下是 Jsoup 的 Maven 依賴:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.4</version>
</dependency>
3、基本使用方法
Spring Boot 集成 Jsoup,以下示例將演示如何使用 Jsoup 解析 HTML 文件和操作 DOM。
3.1 從 URL 抓取網(wǎng)頁(yè)內(nèi)容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupFromUrl {
public static void main(String[] args) {
try {
// 從 URL 抓取網(wǎng)頁(yè)內(nèi)容
Document document = Jsoup.connect("https://lsk-ww.cn").get();
// 輸出網(wǎng)頁(yè)標(biāo)題
System.out.println("Title: " + document.title());
// 輸出網(wǎng)頁(yè)的第一段文字
System.out.println("First Paragraph: " + document.select("p").first().text());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.2 從字符串解析 HTML
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupFromString {
public static void main(String[] args) {
String html = "<html><head><title>Jsoup Example</title></head>" +
"<body><p>Hello, Jsoup!</p></body></html>";
// 解析 HTML 字符串
Document document = Jsoup.parse(html);
// 輸出標(biāo)題和段落內(nèi)容
System.out.println("Title: " + document.title());
System.out.println("Body Text: " + document.body().text());
}
}
3.3 使用 CSS 選擇器提取內(nèi)容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class JsoupCssSelector {
public static void main(String[] args) {
String html = "<html><body>" +
"<div class='content'><h1>Header</h1><p>Paragraph 1</p></div>" +
"<div class='footer'><p>Footer Paragraph</p></div>" +
"</body></html>";
// 解析 HTML
Document document = Jsoup.parse(html);
// 使用 CSS 選擇器提取內(nèi)容
Elements content = document.select(".content h1");
System.out.println("Header: " + content.text());
Elements footer = document.select(".footer p");
System.out.println("Footer: " + footer.text());
}
}
3.4 修改 HTML 內(nèi)容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupModifyHtml {
public static void main(String[] args) {
String html = "<html><body><p>Original Paragraph</p></body></html>";
// 解析 HTML
Document document = Jsoup.parse(html);
// 修改段落內(nèi)容
document.select("p").first().text("Updated Paragraph");
// 輸出修改后的 HTML
System.out.println(document.html());
}
}
3.5 提取網(wǎng)頁(yè)中的鏈接和圖片
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupExtractLinks {
public static void main(String[] args) {
String html = "<html><body>" +
"<a +
"<img src='image.jpg' alt='Example Image'>" +
"</body></html>";
// 解析 HTML
Document document = Jsoup.parse(html);
// 提取鏈接
Elements links = document.select("a[href]");
for (Element link : links) {
System.out.println("Link: " + link.attr("href") + " Text: " + link.text());
}
// 提取圖片
Elements images = document.select("img[src]");
for (Element image : images) {
System.out.println("Image: " + image.attr("src") + " Alt: " + image.attr("alt"));
}
}
}
3.6 處理表單數(shù)據(jù)
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupFormExample {
public static void main(String[] args) {
try {
// 提交表單
Connection.Response response = Jsoup.connect("https://example.com/login")
.data("username", "user123")
.data("password", "pass123")
.method(Connection.Method.POST)
.execute();
// 獲取響應(yīng)的 HTML
Document document = response.parse();
System.out.println("Response: " + document.body().text());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、使用場(chǎng)景
- Web 抓?。禾崛【W(wǎng)頁(yè)內(nèi)容,如標(biāo)題、段落、鏈接等。
- HTML 清洗:清理和格式化用戶生成的 HTML。
- 表單提交:模擬用戶登錄或提交數(shù)據(jù)。
- DOM 操作:解析和修改 HTML 文件。
- 數(shù)據(jù)提?。簭?HTML 表格中提取結(jié)構(gòu)化數(shù)據(jù)。
5、總結(jié)
Jsoup 是處理 HTML 的強(qiáng)大工具,具備快速抓取、解析和操作 HTML 的能力,適合多種應(yīng)用場(chǎng)景。
常見的優(yōu)點(diǎn):
- 使用簡(jiǎn)單,學(xué)習(xí)成本低。
- 功能強(qiáng)大,支持多種 HTML 操作。
- 兼容性強(qiáng),能處理各種 HTML 格式。
常見的缺點(diǎn):
- 僅支持單線程操作,抓取效率有限。
- 對(duì)于動(dòng)態(tài)加載的網(wǎng)頁(yè)(如 AJAX),需要結(jié)合其他工具使用。
以上就是Java利用Jsoup解析和操作HTML的技術(shù)指南的詳細(xì)內(nèi)容,更多關(guān)于Java Jsoup解析和操作HTML的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何基于springboot-admin實(shí)現(xiàn)后臺(tái)監(jiān)控
這篇文章主要介紹了如何基于springboot-admin實(shí)現(xiàn)后臺(tái)監(jiān)控,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例
本篇文章主要介紹了JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
mybatis plus動(dòng)態(tài)數(shù)據(jù)源切換及查詢過程淺析
這篇文章主要介紹了mybatis plus動(dòng)態(tài)數(shù)據(jù)源切換及查詢過程淺析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
java非公平鎖知識(shí)點(diǎn)實(shí)例詳解
在本篇文章里小編給大家整理了一篇關(guān)于java非公平鎖知識(shí)點(diǎn)實(shí)例詳解,有興趣的朋友們可以學(xué)習(xí)參考下。2021-10-10
Lombok不生效,提示java:?找不到符號(hào)的解決方案
這篇文章主要介紹了Lombok不生效,提示java:?找不到符號(hào)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
解決JSTL foEach標(biāo)簽 刷新報(bào)錯(cuò)的方法
本篇文章是對(duì)JSTL foEach標(biāo)簽刷新報(bào)錯(cuò)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
SpringCloud動(dòng)態(tài)配置注解@RefreshScope與@Component的深度解析
在現(xiàn)代微服務(wù)架構(gòu)中,動(dòng)態(tài)配置管理是一個(gè)關(guān)鍵需求,本文將為大家介紹Spring Cloud中相關(guān)的注解@RefreshScope與@Component的使用,需要的小伙伴可以參考下2025-04-04

