如何用jsoup解析HTML标签?

jsoup通过加载HTML字符串、文件或URL创建Document对象,使用DOM遍历或CSS选择器定位元素,支持属性提取、文本获取和节点操作,实现高效HTML解析

什么是jsoup?

jsoup 是一款用于解析、提取和操作HTML文档的Java库,它专为处理真实世界的HTML设计(如处理不闭合标签、错误嵌套等),提供类似jQuery的DOM操作API,广泛应用于网页抓取、数据清洗和HTML解析任务。

如何用jsoup解析HTML标签?


核心解析步骤

加载HTML文档

jsoup支持多种HTML加载方式:

// 从URL加载(需处理异常)
Document doc = Jsoup.connect("https://example.com").get();
// 从字符串加载
String html = "<div><p>Hello, jsoup!</p></div>";
Document doc = Jsoup.parse(html);
// 从本地文件加载
File file = new File("page.html");
Document doc = Jsoup.parse(file, "UTF-8");

定位HTML标签

通过选择器语法或DOM方法定位元素:

// 使用CSS选择器(推荐)
Elements links = doc.select("a[href]");      // 所有带href的<a>标签
Elements headers = doc.select("h1, h2, h3"); // 所有标题标签
// 使用DOM方法
Element firstDiv = doc.getElementById("main"); // 通过ID
Elements paragraphs = doc.getElementsByTag("p"); // 通过标签名

提取标签内容

获取标签的属性和文本:

for (Element link : links) {
    String href = link.attr("href");     // 提取href属性
    String text = link.text();           // 提取可见文本(不含HTML标签)
    String htmlContent = link.html();    // 提取内部HTML
    String outerHtml = link.outerHtml(); // 提取完整HTML(包含自身标签)
}

修改HTML结构

动态操作DOM树:

// 修改属性
link.attr("rel", "nofollow");
// 添加/移除类
div.addClass("highlight");
div.removeClass("old-class");
paragraph.text("新文本内容");  // 转义特殊字符
paragraph.html("<b>加粗文本</b>"); // 插入HTML
// 删除元素
div.remove();

处理嵌套标签

遍历子元素或父元素:

如何用jsoup解析HTML标签?

// 遍历直接子元素
for (Element child : div.children()) {
    System.out.println(child.tagName());
}
// 查找父元素
Element parent = link.parent();
// 查找特定祖先
Element ancestor = link.closest("div.container");

关键特性

  1. 容错性强
    自动修复未闭合标签(如 <li> 未闭合)、错误嵌套结构(如 <div> 内嵌 <table>),确保解析稳定性。

  2. CSS选择器支持
    支持类jQuery的选择器语法:

    doc.select("div.content > p:first-child"); // 定位直接子段落
  3. 白名单过滤(防XSS攻击)
    清理用户输入的HTML:

    String safeHtml = Jsoup.clean(rawHtml, Whitelist.basic());
  4. 文本格式化
    提取纯文本并保留可读格式:

    String plainText = doc.text(); // 获取整个文档的纯文本

完整示例:抓取并解析网页

try {
    // 抓取网页并解析
    Document doc = Jsoup.connect("https://news.example.com")
                        .timeout(5000) // 超时设置
                        .get();
    // 提取所有新闻标题(<h2 class="title">)
    Elements titles = doc.select("h2.title");
    for (Element title : titles) {
        System.out.println("标题: " + title.text());
        System.out.println("父容器ID: " + title.parent().id());
    }
    // 修改第一个标题s.first().html("<em>最新头条</em>");
    // 输出修改后的HTML
    System.out.println(doc.html());
} catch (IOException e) {
    e.printStackTrace(); // 网络异常处理
}

注意事项

  1. 异常处理
    网络请求需捕获 IOException,解析时注意 NullPointerException

    如何用jsoup解析HTML标签?

  2. 性能优化

    • 复用 Document 对象避免重复解析。
    • 使用更精确的选择器(如避免 通配符)。
  3. 资源释放
    解析大型文件时,及时清理无用的 DocumentElements 对象。


适用场景

  • ✅ 网页爬虫数据提取
  • ✅ 模板引擎的HTML预处理
  • ✅ 用户输入内容的安全过滤
  • ❌ 渲染页面(jsoup不执行JavaScript/CSS)

jsoup通过简洁的API实现了高效的HTML解析:

  1. 加载 → 2. 定位 → 3. 提取/修改 → 4. 输出结果
    结合其容错机制和选择器功能,可快速处理复杂HTML结构,是Java开发者处理Web数据的首选工具。

引用说明 基于 jsoup官方文档 及最佳实践总结,示例代码遵循MIT许可证,安全过滤方案参考OWASP XSS防护指南。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41661.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月29日 03:48
下一篇 2025年6月29日 03:54

相关推荐

  • 如何选择安全运维培训,哪些方面值得关注?

    随着信息技术的飞速发展,网络安全问题日益突出,企业对安全运维人才的需求也越来越大,为了满足这一需求,许多机构纷纷推出了安全运维培训课程,如何选择一个比较好的安全运维培训呢?以下将从专业、权威、可信和体验四个方面进行分析,专业师资力量选择安全运维培训时,首先要关注师资力量,优秀的师资团队能够为学生提供高质量的教学……

    2026年3月8日
    1200
  • 网络安全的本质工作原理究竟是怎样的?揭秘安全网络工作原理背后的科学奥秘。

    安全网络工作原理随着互联网的普及和深入,网络安全问题日益凸显,安全网络工作原理是确保网络环境稳定、数据安全、用户隐私的重要基础,本文将从专业、权威、可信、体验的角度,详细介绍安全网络的工作原理,安全网络的基本概念安全网络是指在确保网络正常运行的前提下,采取一系列技术和管理措施,保护网络系统不受恶意攻击、非法侵入……

    2026年3月28日
    1100
  • 贵港智能交通股份是上市公司吗,如何申购?

    贵港智能交通股份通过部署自适应信号灯和交通流预测系统,让贵港市区主干道通行效率提升了相当比例,是本地智能交通领域的核心服务商,贵港智能交通系统怎么样?许多市民和交管部门都在问,贵港智能交通系统到底怎么样?从实际运行情况来看,这套系统在数据采集、信号控制和应急响应方面表现突出,系统架构与数据采集贵港智能交通股份的……

    2026年8月1日
    600
  • 如何实现Golang客户端的高效负载均衡策略?

    Golang客户端负载均衡是一种在客户端实现的负载均衡技术,它通过在客户端对请求进行分发,从而实现服务器的负载均衡,Golang客户端负载均衡具有高性能、低延迟、可扩展性强等优点,在微服务架构、分布式系统中得到了广泛应用,本文将详细介绍Golang客户端负载均衡的实现原理、常用算法以及在实际应用中的注意事项,G……

    2026年1月16日
    1600
  • gt850m深度学习是何等性能?在哪些领域展现出卓越应用?

    GT850M深度学习:随着人工智能技术的不断发展,深度学习在各个领域都取得了显著的成果,GT850M深度学习作为一款高性能的深度学习处理器,在图像识别、语音识别、自然语言处理等领域有着广泛的应用,本文将详细介绍GT850M深度学习处理器的基本原理、应用场景以及国内相关文献权威来源,GT850M深度学习处理器简介……

    2026年1月16日
    1700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN