Java利用Jsoup解析和操作HTML的技术指南

 更新时间:2025年03月10日 10:31:14   作者:拾荒的小海螺  
在现代 Java 开发中,处理 HTML 数据是一项常见需求,无论是抓取网页数据、解析 HTML 文档,还是操作 DOM 树,Jsoup 都是一个强大的工具,本文将介绍 Jsoup 的基本功能,并通过多个详细的代码示例展示如何使用它解析和操作 HTML,需要的朋友可以参考下

1、简述

在现代 Java 开发中,处理 HTML 数据是一项常见需求,无论是抓取网页数据、解析 HTML 文档,还是操作 DOM 树,Jsoup 都是一个强大的工具。它是一个基于 Java 的 HTML 解析库,支持从 URL、文件或字符串中解析 HTML,提供类似于 jQuery 的 API,便于选择和操作 DOM 元素。

本文将介绍 Jsoup 的基本功能,并通过多个详细的代码示例展示如何使用它解析和操作 HTML。

2、为什么选择 Jsoup?

  • 简单易用:API 设计友好,功能丰富。
  • 强大的选择器:支持 CSS 选择器和 DOM 遍历。
  • 灵活的 HTML 操作:可以轻松修改 HTML。
  • 兼容性强:支持解析 HTML5 和宽松的 HTML。
  • 高效:可以从 URL 快速抓取内容。

在使用 Jsoup之前,需要添加其依赖。以下是 Jsoup 的 Maven 依赖:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.4</version>
</dependency>

3、基本使用方法

Spring Boot 集成 Jsoup,以下示例将演示如何使用 Jsoup 解析 HTML 文件和操作 DOM。

3.1 从 URL 抓取网页内容

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

public class JsoupFromUrl {
    public static void main(String[] args) {
        try {
            // 从 URL 抓取网页内容
            Document document = Jsoup.connect("https://lsk-ww.cn").get();
            
            // 输出网页标题
            System.out.println("Title: " + document.title());
            
            // 输出网页的第一段文字
            System.out.println("First Paragraph: " + document.select("p").first().text());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 从字符串解析 HTML

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

public class JsoupFromString {
    public static void main(String[] args) {
        String html = "<html><head><title>Jsoup Example</title></head>" +
                      "<body><p>Hello, Jsoup!</p></body></html>";

        // 解析 HTML 字符串
        Document document = Jsoup.parse(html);

        // 输出标题和段落内容
        System.out.println("Title: " + document.title());
        System.out.println("Body Text: " + document.body().text());
    }
}

3.3 使用 CSS 选择器提取内容

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

public class JsoupCssSelector {
    public static void main(String[] args) {
        String html = "<html><body>" +
                      "<div class='content'><h1>Header</h1><p>Paragraph 1</p></div>" +
                      "<div class='footer'><p>Footer Paragraph</p></div>" +
                      "</body></html>";

        // 解析 HTML
        Document document = Jsoup.parse(html);

        // 使用 CSS 选择器提取内容
        Elements content = document.select(".content h1");
        System.out.println("Header: " + content.text());

        Elements footer = document.select(".footer p");
        System.out.println("Footer: " + footer.text());
    }
}

3.4 修改 HTML 内容

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

public class JsoupModifyHtml {
    public static void main(String[] args) {
        String html = "<html><body><p>Original Paragraph</p></body></html>";

        // 解析 HTML
        Document document = Jsoup.parse(html);

        // 修改段落内容
        document.select("p").first().text("Updated Paragraph");

        // 输出修改后的 HTML
        System.out.println(document.html());
    }
}

3.5 提取网页中的链接和图片

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

public class JsoupExtractLinks {
    public static void main(String[] args) {
        String html = "<html><body>" +
                      "<a href='https://example.com'>Example</a>" +
                      "<img src='image.jpg' alt='Example Image'>" +
                      "</body></html>";

        // 解析 HTML
        Document document = Jsoup.parse(html);

        // 提取链接
        Elements links = document.select("a[href]");
        for (Element link : links) {
            System.out.println("Link: " + link.attr("href") + " Text: " + link.text());
        }

        // 提取图片
        Elements images = document.select("img[src]");
        for (Element image : images) {
            System.out.println("Image: " + image.attr("src") + " Alt: " + image.attr("alt"));
        }
    }
}

3.6 处理表单数据

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupFormExample {
    public static void main(String[] args) {
        try {
            // 提交表单
            Connection.Response response = Jsoup.connect("https://example.com/login")
                    .data("username", "user123")
                    .data("password", "pass123")
                    .method(Connection.Method.POST)
                    .execute();

            // 获取响应的 HTML
            Document document = response.parse();
            System.out.println("Response: " + document.body().text());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4、使用场景

  • Web 抓取:提取网页内容,如标题、段落、链接等。
  • HTML 清洗:清理和格式化用户生成的 HTML。
  • 表单提交:模拟用户登录或提交数据。
  • DOM 操作:解析和修改 HTML 文件。
  • 数据提取:从 HTML 表格中提取结构化数据。

5、总结

Jsoup 是处理 HTML 的强大工具,具备快速抓取、解析和操作 HTML 的能力,适合多种应用场景。

常见的优点:

  • 使用简单,学习成本低。
  • 功能强大,支持多种 HTML 操作。
  • 兼容性强,能处理各种 HTML 格式。

常见的缺点:

  • 仅支持单线程操作,抓取效率有限。
  • 对于动态加载的网页(如 AJAX),需要结合其他工具使用。

以上就是Java利用Jsoup解析和操作HTML的技术指南的详细内容,更多关于Java Jsoup解析和操作HTML的资料请关注脚本之家其它相关文章!

相关文章

  • 如何基于springboot-admin实现后台监控

    如何基于springboot-admin实现后台监控

    这篇文章主要介绍了如何基于springboot-admin实现后台监控,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot + vue2.0查询所用功能详解

    SpringBoot + vue2.0查询所用功能详解

    这篇文章主要介绍了SpringBoot + vue2.0查询所用功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • JAVA中使用JSON进行数据传递示例

    JAVA中使用JSON进行数据传递示例

    本篇文章主要介绍了JAVA中使用JSON进行数据传递示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • mybatis plus动态数据源切换及查询过程浅析

    mybatis plus动态数据源切换及查询过程浅析

    这篇文章主要介绍了mybatis plus动态数据源切换及查询过程浅析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java非公平锁知识点实例详解

    java非公平锁知识点实例详解

    在本篇文章里小编给大家整理了一篇关于java非公平锁知识点实例详解,有兴趣的朋友们可以学习参考下。
    2021-10-10
  • Lombok不生效,提示java: 找不到符号的解决方案

    Lombok不生效,提示java: 找不到符号的解决方案

    这篇文章主要介绍了Lombok不生效,提示java: 找不到符号的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 解决JSTL foEach标签 刷新报错的方法

    解决JSTL foEach标签 刷新报错的方法

    本篇文章是对JSTL foEach标签刷新报错的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java字符串与正则表达式操作方法详解

    Java字符串与正则表达式操作方法详解

    在Java编程中正则表达式是一个强大的工具,用于处理字符串和进行模式匹配,这篇文章主要介绍了Java字符串与正则表达式操作的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Java定时器Timer的源码分析

    Java定时器Timer的源码分析

    通过源码分析,我们可以更深入的了解其底层原理。本文将通过Timer的源码,带大家深入了解Java Timer的使用,感兴趣的小伙伴可以了解一下
    2022-11-11
  • SpringCloud动态配置注解@RefreshScope与@Component的深度解析

    SpringCloud动态配置注解@RefreshScope与@Component的深度解析

    在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍Spring Cloud中相关的注解@RefreshScope与@Component的使用,需要的小伙伴可以参考下
    2025-04-04

最新评论