Java中的HTML解析:Jsoup和HtmlUnit库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的HTML解析:Jsoup和HtmlUnit库概述



HTML解析(或网络爬虫)是从HTML文档中提取数据的过程。在Java中,有几个强大的库可以完成此任务,其中突出的是Jsoup(用于静态HTML)和HtmlUnit(用于包含JavaScript的动态页面)。在本文中,我们将详细讨论这两个库,展示代码示例,并帮助您为pythonlib.ru上的项目选择合适的工具。



什么是Jsoup?

Jsoup是一个轻量级的库,用于解析、提取和操作HTML文档。它支持CSS选择器,这使得它对Web开发人员来说直观易懂。Jsoup可以处理任何HTML,即使其格式不正确。



安装Jsoup

在您的pom.xml(Maven)中添加依赖项:

<dependency>    <groupId>org.jsoup</groupId>    <artifactId>jsoup</artifactId>    <version>1.17.2</version></dependency>


使用Jsoup进行解析的示例

考虑一个基本示例——获取页面标题和所有链接:

import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;

public class JsoupExample { public static void main(String[] args) throws Exception { // 1. 加载HTML文档 Document doc = Jsoup.connect("https://example.com").get();

// 2. 提取页面标题 String title = doc.title(); System.out.println("标题: " + title);

// 3. 查找所有链接(<a>标签) Elements links = doc.select("a[href]"); for (Element link : links) { String href = link.attr("href"); String text = link.text(); System.out.println("链接: " + href + " — 文本: " + text); }

// 4. 从特定块中提取文本(例如,<div class="content">) Element content = doc.selectFirst("div.content"); if (content != null) { System.out.println("块内容: " + content.text()); } }}

在此示例中,Jsoup.connect()执行HTTP请求,而select()使用CSS选择器查找元素。Jsoup还可以处理本地文件和HTML字符串。



什么是HtmlUnit?

HtmlUnit是一个基于Java的“无头”浏览器。它不仅解析HTML,还执行JavaScript、处理AJAX请求并模拟用户操作。对于内容动态加载的网站来说,这是一个理想的选择。



安装HtmlUnit

<dependency>    <groupId>net.sourceforge.htmlunit</groupId>    <artifactId>htmlunit</artifactId>    <version>2.70.0</version></dependency>


使用HtmlUnit进行解析的示例

解析通过JavaScript加载数据的页面:

import com.gargoylesoftware.htmlunit.WebClient;import com.gargoylesoftware.htmlunit.html.HtmlPage;import com.gargoylesoftware.htmlunit.html.HtmlElement;

public class HtmlUnitExample { public static void main(String[] args) throws Exception { // 1. 创建WebClient(浏览器模拟器) try (WebClient webClient = new WebClient()) { // 禁用CSS和日志记录以加快速度 webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setThrowExceptionOnScriptError(false);

// 2. 加载页面(JavaScript将自动执行) HtmlPage page = webClient.getPage("https://example.com/dynamic");

// 3. 等待,页

推荐