JSOUP 使用教程

JSOUP 使用教程


1. 什么是 Jsoup?

Jsoup 是一个用于解析和操作 HTML 文档的 Java 库。它可以帮助你:

  • 提取网页中的特定信息(如标题、段落、链接等)。
  • 修改 HTML 内容(添加、删除或修改节点)。
  • 将 HTML 文档保存为字符串或文件。

Jsoup 的核心功能是解析 HTML 并提供类似 CSS 选择器的 API,方便用户快速定位和操作 DOM 元素。


2. 安装 Jsoup

在项目中使用 Jsoup,可以通过以下方式添加依赖:

Maven 方式

pom.xml 文件中添加:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.4</version>
</dependency>
手动引入 JAR 包

Jsoup 官网 下载最新版本的 JAR 文件,将其添加到项目依赖中。


3. 基本用法
3.1 解析 HTML 文档

Jsoup 可以解析本地文件、字符串或通过网络获取的 HTML 内容。

从文件加载
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        // 从本地 HTML 文件加载文档
        Document doc = Jsoup.load("example.html");
        System.out.println(doc.title()); // 输出标题
    }
}
从字符串解析
String htmlContent = "<html><head><title>Test</title></head><body><h1>Hello World</h1></body></html>";
Document doc = Jsoup.parse(htmlContent);
System.out.println(doc.title()); // 输出 "Test"
从 URL 加载
// 通过网络加载 HTML 内容
Document doc = Jsoup.connect("https://example.com").get();
System.out.println(doc.title());
3.2 设置超时时间

在从网络加载内容时,可以设置超时时间以避免程序长时间无响应:

Document doc = Jsoup.connect("https://example.com")
    .timeout(5000) // 5秒超时
    .get();

4. 查找和选择节点

Jsoup 提供了强大的节点选择功能,支持 CSS 选择器。

4.1 常用选择方法
  • select(String selector):根据 CSS 选择器查找所有匹配的元素。
  • getElementById(String id):通过 ID 查找单个元素。
  • getElementsByTag(String tag):通过标签名查找所有元素。
  • getElementsByClass(String className):通过类名查找所有元素。
4.2 示例
Document doc = Jsoup.connect("https://example.com").get();

// 1. 查找所有的 <a> 链接
Elements links = doc.select("a");
for (Element link : links) {
    System.out.println(link.attr("href")); // 输出链接地址
}

// 2. 查找所有段落(<p> 标签)
Elements paragraphs = doc.select("p");
for (Element p : paragraphs) {
    System.out.println(p.text()); // 输出段落文本
}

// 3. 查找特定类名的元素
Elements divs = doc.getElementsByClass("container");
System.out.println(divs.size());

5. 提取和修改数据
5.1 提取文本
Element element = doc.selectFirst(".content"); // 获取第一个 .content 类的元素
String text = element.text(); // 提取纯文本
System.out.println(text);
5.2 提取属性值
// 查找所有 <img> 标签并提取 src 属性
Elements imgs = doc.select("img");
for (Element img : imgs) {
    String src = img.attr("src"); // 获取 src 属性值
    System.out.println(src);
}
5.3 修改节点
// 1. 添加新内容
Element body = doc.body();
body.append("<p>This is a new paragraph.</p>");

// 2. 删除元素
Elements scripts = doc.select("script");
scripts.remove(); // 删除所有 <script> 标签

// 3. 替换文本
doc.selectFirst("#title").text("New Title"); // 修改 ID 为 title 的元素的文本

6. 处理表单和链接
6.1 提取表单数据
// 查找所有 <form> 表单
Elements forms = doc.select("form");
for (Element form : forms) {
    String action = form.attr("action"); // 获取表单的 action 属性
    String method = form.attr("method"); // 获取表单的 method 属性
    System.out.println("Form action: " + action);
}
6.2 提取链接
// 查找所有 <a> 链接
Elements links = doc.select("a[href]");
for (Element link : links) {
    String href = link.attr("abs:href"); // 获取完整的 URL 地址(包括域名)
    System.out.println(href);
}

7. 保存文档
7.1 将文档保存为字符串
String htmlContent = doc.outerHtml(); // 转换为 HTML 字符串
System.out.println(htmlContent);
7.2 将文档保存为文件
// 保存修改后的文档到本地文件
File outputFile = new File("output.html");
doc.outputSettings(new Document.OutputSettings().prettyPrint(false)); // 禁止自动格式化
Files.write(outputFile, doc.outerHtml(), StandardCharsets.UTF_8);

8. 注意事项
  1. 编码问题

    • 在处理网络请求时,建议指定编码方式:
      Document doc = Jsoup.connect("https://example.com")
          .charset("UTF-8") // 设置字符编码
          .get();
      
  2. 避免被反爬虫机制拦截

    • 可以设置请求头(如 User-Agent)来模拟浏览器访问:
      Document doc = Jsoup.connect("https://example.com")
          .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
          .get();
      
  3. 处理动态内容

    • Jsoup 无法直接处理 JavaScript 加载的内容,此时可以考虑使用工具(如 Selenium)来获取完整的页面内容。

9. 总结
  • 优势:API 简单易用,支持 CSS 选择器,适合快速解析和操作 HTML。
  • 适用场景:网页抓取、数据提取、简单页面生成等。
  • 不足:无法处理动态 JavaScript 内容,对某些复杂页面可能需要额外处理。

希望这篇教程对你有所帮助!如果还有其他问题,欢迎在评论区留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值