Java HTML解析:Jsoup、HtmlUnit及其他工具

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

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

开始课程

Java HTML解析:库与工具概览



HTML解析是从HTML文档中提取结构化数据的过程。在Java中,有多个强大的库可以完成此任务,不仅能解析静态页面,还能处理动态内容。本文将介绍三种最流行的工具:Jsoup、HtmlUnit和Jericho HTML解析器。它们各有特点和适用场景。



1. Jsoup — 通用HTML解析器



Jsoup是最流行的Java HTML处理库。它提供了便捷的API用于加载、解析和提取数据,并支持CSS选择器和DOM树操作。Jsoup非常适合静态页面和简单的网页抓取任务。



主要功能:

  • 从URL、文件或字符串加载HTML
  • 使用CSS选择器提取数据
  • 清理HTML中不需要的标签
  • 修改DOM(添加/删除元素)
  • 自动修正不规范的HTML


代码示例:提取新闻标题

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

public class JsoupExample { public static void main(String[] args) throws Exception { // 加载HTML页面 Document doc = Jsoup.connect("https://example.com/news") .userAgent("Mozilla/5.0") .timeout(5000) .get(); // 提取所有class为"news-title"的h2标题 Elements titles = doc.select("h2.news-title"); // 输出每个标题的文本 titles.forEach(title -> System.out.println(title.text())); }}


2. HtmlUnit — 支持JavaScript的解析器



HtmlUnit是一个基于Java的无头浏览器,模拟真实浏览器行为。与Jsoup不同,它能执行JavaScript代码、处理AJAX请求并支持Cookie。这是解析现代SPA应用和动态内容网站不可或缺的工具。



关键特性:

  • 完全模拟浏览器(Chrome、Firefox、IE)
  • 执行JavaScript(包括jQuery和React)
  • 支持表单、点击、页面导航
  • 处理Cookie、会话和重定向
  • 内置XPath和CSS选择器支持


代码示例:等待动态内容加载

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 { try (WebClient webClient = new WebClient()) { // 关闭日志和超时 webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setJavaScriptEnabled(true); // 加载页面 HtmlPage page = webClient.getPage("https://example.com/dynamic"); // 等待2秒以执行JS webClient.waitForBackgroundJavaScript(2000); // 通过XPath提取数据 HtmlElement element = page.getFirstByXPath("//div[@class='result']/p"); System.out.println("结果: " + element.getTextContent()); } }}


3. Jericho HTML解析器 — 轻量快速



Jericho HTML解析器是一个轻量级库,依赖极少。它擅长解析无效HTML,并提供对文档结构的底层访问。

推荐