jsoup 入门:用 Java 轻松解析 HTML
jsoup 是一个 Java HTML 解析库。
它可以把一段 HTML 转换成类似浏览器 DOM 的结构,然后通过 CSS Selector 查找页面中的元素,非常适合:
HTML 解析
网页数据提取
链接提取
HTML 清洗
简单爬虫
截至 2026 年 9 月,jsoup 当前版本是 1.23.2。官方将它定位为用于 HTML/XML 解析、编辑、清洗和数据提取的 Java 库。(jsoup )
1. 引入 jsoup
Maven:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.23.2</version>
</dependency>
Gradle:
implementation 'org.jsoup:jsoup:1.23.2'
jsoup 本身没有必须额外安装的运行时依赖,并支持 Java 8 及以上版本。(jsoup )
2. 解析一段 HTML
先看最简单的例子:
String html = """
<html>
<head>
<title>Hello jsoup</title>
</head>
<body>
<h1>Hello World</h1>
<p>学习 jsoup</p>
</body>
</html>
""";
Document document = Jsoup.parse(html);
System.out.println(document.title());
输出:
Hello jsoup
这里:
Jsoup.parse(html)
会把普通字符串解析成:
Document
也就是一棵 HTML DOM 树。官方文档中,Document 继承自 Element,HTML 中的标签会被解析成不同的节点。(jsoup )
可以简单理解成:
HTML 字符串
↓
Jsoup.parse()
↓
Document
↓
HTML DOM 树
3. 获取网页
jsoup 也可以直接请求网页:
Document document =
Jsoup.connect("https://example.com")
.get();
System.out.println(document.title());
整个流程就是:
https://example.com
↓
Jsoup.connect()
↓
获取 HTML
↓
解析 HTML
↓
Document
所以很多简单的数据采集程序可以直接:
Jsoup.connect(url).get();
然后开始解析页面。
4. 查找 HTML 元素
假设页面是:
<div class="article">
<h2>Java 入门</h2>
<p>学习 Java 基础知识</p>
</div>
我们想拿到标题,可以这样:
Element title =
document.selectFirst(".article h2");
System.out.println(title.text());
输出:
Java 入门
这里:
.article h2
就是 CSS Selector。
和前端写 CSS 非常类似。
例如:
document.select("div");
查找所有 div。
document.select(".article");
查找:
class="article"
的元素。
document.select("#main");
查找:
id="main"
的元素。
jsoup 官方提供了完整的 CSS Selector 支持,select() 返回多个匹配元素,selectFirst() 可以取得第一个匹配元素。(jsoup )
5. Element 和 Elements
这是 jsoup 最重要的几个类:
Document
Element
Elements
可以简单理解成:
Document
整个 HTML 页面
Element
一个 HTML 标签
Elements
多个 HTML 标签
例如页面中有:
<a href="/1">Java</a>
<a href="/2">Spring</a>
<a href="/3">MySQL</a>
获取所有链接:
Elements links =
document.select("a");
for (Element link : links) {
System.out.println(link.text());
}
输出:
Java
Spring
MySQL
所以:
Element
代表一个元素。
而:
Elements
可以理解成:
List<Element>
一样的一组元素。
6. 获取属性
很多时候我们不只需要文字。
比如:
<a href="/article/123">Java教程</a>
获取文字:
String text = link.text();
结果:
Java教程
获取 href:
String href = link.attr("href");
结果:
/article/123
如果这个 HTML 是从网页获取的,还可以取得完整 URL:
String url = link.absUrl("href");
可能得到:
https://example.com/article/123
7. 写一个简单网页解析程序
例如我们想获取一个网页中的所有链接:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args)
throws Exception {
Document document =
Jsoup.connect("https://example.com")
.get();
Elements links =
document.select("a[href]");
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href");
System.out.println(title);
System.out.println(url);
System.out.println("------");
}
}
}
这里:
a[href]
表示:
查找所有拥有
href属性的<a>标签。
这也是 jsoup 最典型的使用方式。官方 CSS Selector 文档同样使用 a[href] 作为元素选择示例。(jsoup )
整体流程其实只有几步:
访问网页
↓
获得 HTML
↓
解析为 Document
↓
CSS Selector 查找元素
↓
Element
↓
提取 text / attr
8. jsoup 本质上在做什么?
例如服务器返回:
<html>
<body>
<h1>Hello</h1>
<a href="/java">
Java教程
</a>
</body>
</html>
jsoup 会把它解析成类似:
Document
└── html
└── body
├── h1
│ └── Hello
│
└── a
├── href="/java"
└── Java教程
然后我们通过:
document.select("a");
在这棵 DOM 树中寻找:
<a>
节点。
找到之后:
element.text();
获取文本。
element.attr("href");
获取属性。
所以 jsoup 最核心的思想其实就是:
HTML
↓
Parser
↓
DOM Tree
↓
CSS Selector
↓
Element
↓
提取数据
9. jsoup 不是浏览器
这里有一个初学者很容易踩的坑。
jsoup 可以:
发送 HTTP 请求
解析 HTML
操作 DOM
提取数据
但是它不是 Chrome。
如果一个网页的数据需要执行 JavaScript 后才能出现,例如:
打开网页
↓
执行 JavaScript
↓
调用后端 API
↓
页面出现数据
那么单纯使用 jsoup 获取到的 HTML 中,可能根本没有这些数据。
这种情况下通常需要:
直接分析网页 API
或者使用:
Playwright
Selenium
这类真正能够运行浏览器和 JavaScript 的工具。
总结
jsoup 入门阶段其实只需要掌握几个东西:
Jsoup
↓
Document
↓
Element / Elements
↓
select()
↓
text()
attr()
最经典的代码结构就是:
Document doc =
Jsoup.connect(url).get();
Elements elements =
doc.select("CSS选择器");
for (Element element : elements) {
String text = element.text();
String value = element.attr("属性名");
}
掌握这一套之后,基本就已经能够完成大部分简单的 HTML 解析任务了。
再继续深入,则可以学习:
CSS Selector 高级语法
↓
Cookie / Header
↓
POST 请求
↓
Session
↓
HTML 清洗
↓
简单爬虫
↓
jsoup + OkHttp
理解 jsoup 最重要的一句话就是:
jsoup 的核心,就是把 HTML 变成 Java 可以方便查询和操作的 DOM 树。