Java利用Jsoup解析和操作HTML的技術(shù)指南
1、簡述
在現(xiàn)代 Java 開發(fā)中,處理 HTML 數(shù)據(jù)是一項常見需求,無論是抓取網(wǎng)頁數(shù)據(jù)、解析 HTML 文檔,還是操作 DOM 樹,Jsoup 都是一個強大的工具。它是一個基于 Java 的 HTML 解析庫,支持從 URL、文件或字符串中解析 HTML,提供類似于 jQuery 的 API,便于選擇和操作 DOM 元素。
本文將介紹 Jsoup 的基本功能,并通過多個詳細的代碼示例展示如何使用它解析和操作 HTML。
2、為什么選擇 Jsoup?
- 簡單易用:API 設(shè)計友好,功能豐富。
- 強大的選擇器:支持 CSS 選擇器和 DOM 遍歷。
- 靈活的 HTML 操作:可以輕松修改 HTML。
- 兼容性強:支持解析 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)頁內(nèi)容
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupFromUrl { public static void main(String[] args) { try { // 從 URL 抓取網(wǎng)頁內(nèi)容 Document document = Jsoup.connect("https://lsk-ww.cn").get(); // 輸出網(wǎng)頁標(biāo)題 System.out.println("Title: " + document.title()); // 輸出網(wǎng)頁的第一段文字 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)頁中的鏈接和圖片
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、使用場景
- Web 抓?。禾崛【W(wǎng)頁內(nèi)容,如標(biāo)題、段落、鏈接等。
- HTML 清洗:清理和格式化用戶生成的 HTML。
- 表單提交:模擬用戶登錄或提交數(shù)據(jù)。
- DOM 操作:解析和修改 HTML 文件。
- 數(shù)據(jù)提?。簭?HTML 表格中提取結(jié)構(gòu)化數(shù)據(jù)。
5、總結(jié)
Jsoup 是處理 HTML 的強大工具,具備快速抓取、解析和操作 HTML 的能力,適合多種應(yīng)用場景。
常見的優(yōu)點:
- 使用簡單,學(xué)習(xí)成本低。
- 功能強大,支持多種 HTML 操作。
- 兼容性強,能處理各種 HTML 格式。
常見的缺點:
- 僅支持單線程操作,抓取效率有限。
- 對于動態(tài)加載的網(wǎng)頁(如 AJAX),需要結(jié)合其他工具使用。
以上就是Java利用Jsoup解析和操作HTML的技術(shù)指南的詳細內(nèi)容,更多關(guān)于Java Jsoup解析和操作HTML的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中一個線程執(zhí)行死循環(huán)有什么后果
這篇文章主要為大家詳細介紹了Java中一個線程執(zhí)行死循環(huán)有什么后果,當(dāng)一個線程在執(zhí)行死循環(huán)時會影響另外一個線程嗎,下面為大家揭曉2016-05-05java使用Validation進行數(shù)據(jù)校驗的方式總結(jié)
在Java中提供了一系列的校驗方式,下面這篇文章主要給大家介紹了關(guān)于java使用Validation進行數(shù)據(jù)校驗的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06springboot各種格式轉(zhuǎn)pdf的實例代碼
這篇文章主要介紹了springboot各種格式轉(zhuǎn)pdf的實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01SpingMvc復(fù)雜參數(shù)傳收總結(jié)
這篇文章主要為大家介紹了SpingMvc復(fù)雜參數(shù)傳收總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08