本文目录导读:

Jsoup 是一个 Java 库,用于解析、提取和操作 HTML 文档,以下是使用 Jsoup 解析 HTML 的完整指南:
添加依赖
Maven
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
Gradle
implementation 'org.jsoup:jsoup:1.17.2'
解析 HTML 的三种方式
从 URL 直接解析
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
Document doc = Jsoup.connect("https://example.com")
.userAgent("Mozilla/5.0")
.timeout(5000)
.get();
从 HTML 字符串解析
String html = "<html><head><title>示例</title></head><body><p>Hello World</p></body></html>"; Document doc = Jsoup.parse(html);
从本地文件解析
File input = new File("/path/to/file.html");
Document doc = Jsoup.parse(input, "UTF-8");
提取数据的基本操作
获取元素文本内容
// 获取特定元素文本
String text = doc.body().text();
// 获取第一个匹配的元素
Element firstParagraph = doc.select("p").first();
String paraText = firstParagraph.text();
// 获取元素的 HTML 内容
String htmlContent = firstParagraph.html();
使用 CSS 选择器
// 通过 ID 选择
Element element = doc.select("#myId").first();
// 通过类名选择
Elements elements = doc.select(".myClass");
// 通过标签名选择
Elements paragraphs = doc.select("p");
// 组合选择器
Elements links = doc.select("div.content a[href]");
// 属性选择
Elements images = doc.select("img[src$=.jpg]");
获取元素属性
// 获取链接
Elements links = doc.select("a[href]");
for (Element link : links) {
String href = link.attr("href");
String text = link.text();
}
// 获取图片地址
Elements images = doc.select("img[src]");
for (Element img : images) {
String src = img.attr("abs:src"); // 获取绝对路径
String alt = img.attr("alt");
}
完整示例:爬取新闻标题
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class JsoupExample {
public static void main(String[] args) {
try {
// 连接到目标网站
Document doc = Jsoup.connect("https://news.example.com")
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
.timeout(10000)
.get();
// 选择新闻标题
Elements newsTitles = doc.select("h2.news-title a");
// 遍历并打印
for (Element title : newsTitles) {
String newsText = title.text();
String newsLink = title.attr("abs:href");
System.out.println("标题: " + newsText);
System.out.println("链接: " + newsLink);
System.out.println("---");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
常用 API 汇总
| 方法 | 描述 |
|---|---|
getElementById(String id) |
根据 ID 获取元素 |
getElementsByTag(String tag) |
根据标签名获取元素 |
getElementsByClass(String className) |
根据类名获取元素 |
select(String cssQuery) |
CSS 选择器查询 |
attr(String key) |
获取属性值 |
text() |
获取文本内容 |
html() |
获取 HTML 内容 |
outerHtml() |
获取包含自身标签的 HTML |
hasAttr(String key) |
是否有指定属性 |
注意事项
- 处理编码问题:使用
Jsoup.parse(html, "UTF-8")指定编码 - 添加 User-Agent:避免被服务器拒绝
- 设置超时:
timeout(int millis)防止请求卡住 - 异常处理:网络请求需要处理
IOException
如果需要更高级的用法,如处理动态加载的内容,可能需要结合 Selenium 或 Playwright 等工具。