1457 字
约 4 分钟
3
jsoup 入门:用 Java 轻松解析 HTML

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 树。

jsoup 入门:用 Java 轻松解析 HTML
http://www.clxhxhhr.top/posts/633/
作者
clxstart
发布于
2026-09-16
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。