如何用jsoup快速解析HTML?

使用jsoup解析HTML时,首先导入库,通过Jsoup.connect()加载网页或Jsoup.parse()解析字符串,生成Document对象后,用DOM遍历或CSS选择器提取所需元素和数据。

Jsoup 是一个强大的 Java HTML 解析库,专为处理真实世界的 HTML 而设计,它提供了一套简洁的 API,支持 DOM 遍历、CSS 选择器操作以及数据提取,是爬虫开发、数据清洗和网页分析的理想工具,以下是详细解析流程:

如何用jsoup快速解析HTML?


核心功能解析

  1. HTML 清洗与规范化
    Jsoup 会自动将输入的 HTML 转换为符合标准的 DOM 结构,修复未闭合标签、嵌套错误等问题:

    String html = "<div><p>破碎的HTML";
    Document doc = Jsoup.parse(html);
    System.out.println(doc.html());
    // 输出: <html><head></head><body><div><p>破碎的HTML</p></div></body></html>
  2. 数据来源解析
    支持多种输入源:

    • 字符串解析
      Document doc = Jsoup.parse(htmlString);
    • URL 直接抓取(需处理异常)
      Document doc = Jsoup.connect("https://example.com")
                       .timeout(5000)  // 超时设置
                       .get();
    • 本地文件解析
      Document doc = Jsoup.parse(new File("page.html"), "UTF-8");

DOM 遍历与数据提取

  1. 使用 CSS 选择器
    类 jQuery 语法精准定位元素:

    Elements links = doc.select("a[href]");  // 所有带链接的<a>标签
    for (Element link : links) {
        String url = link.attr("href");      // 获取属性
        String text = link.text();           // 获取可见文本
    }
  2. DOM 树遍历
    通过父子节点关系操作:

    如何用jsoup快速解析HTML?

    Element body = doc.body();
    Element firstDiv = body.child(0);        // 获取第一个子元素
    Element parent = firstDiv.parent();      // 获取父元素

高级数据操作技巧

  1. 处理

    • 获取完整 HTML:element.html()
    • 获取纯文本:element.text()
    • 修改属性:element.attr("class", "newClass")
  2. 相对路径转绝对路径
    自动转换链接为绝对路径:

    String absUrl = link.attr("abs:href");  // 输出 http://example.com/page
  3. HTML 片段处理
    解析部分内容:

    Element footer = Jsoup.parseBodyFragment("<div>Footer</div>").body();

安全与防御

  1. XSS 防护
    使用 Jsoup.clean() 过滤危险标签:

    String safeHtml = Jsoup.clean(rawHtml, 
        Safelist.basic()  // 白名单规则
    );

    支持自定义白名单(如允许特定标签和属性)。

    如何用jsoup快速解析HTML?


实战示例:爬取新闻标题

Document doc = Jsoup.connect("https://news.example.com").get();
Elements news = doc.select(".news-title");  // 根据CSS类选择
for (Element title : news) {
    System.out.println("标题: " + title.text());
    System.out.println("链接: " + title.attr("abs:href"));
}

性能优化建议

  • 复用 Connection 对象减少连接开销
  • 使用 select 替代递归遍历提升效率
  • 设置合理超时:.timeout(3000)
  • 关闭响应避免资源泄漏(通过 try-with-resources)

常见问题排查

  • 乱码问题:在 parse() 中指定字符集,如 Jsoup.parse(html, "UTF-8")
  • 连接拒绝:检查网络或设置 User-Agent:.header("User-Agent", "Mozilla/5.0")
  • 元素遗漏:确认页面是否通过 JavaScript 动态加载(Jsoup 不执行 JS)

为什么选择 Jsoup?

  • 精准的 CSS 选择器:语法与浏览器一致
  • 容错性强:自动修复混乱的 HTML 结构
  • 零依赖:仅需单一 JAR 文件(官网下载
  • 持续维护:GitHub 活跃社区与及时更新

引用说明参考 Jsoup 官方文档(jsoup.org)及 HTML 解析标准,代码示例基于 Jsoup 1.16.1 验证,适用于 Java 8+ 环境,实践时请遵守目标网站的 robots.txt 协议及法律法规。

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

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月29日 04:53
下一篇 2025年6月29日 04:59

相关推荐

  • HTML如何加密URL?

    HTML本身不直接提供URL加密功能,但可通过JavaScript的encodeURIComponent()函数对URL参数进行编码转换,将特殊字符转为安全格式(如空格变%20),这并非真正加密,而是防止字符冲突和基础安全防护,敏感数据应配合HTTPS和后端加密实现。

    2025年6月17日
    200
  • HTML正确使用空格的秘诀?

    在HTML中,空格需通过特殊方式处理:普通空格会被合并显示一个,连续空格应使用 实体或CSS的white-space属性控制,合理运用空格提升代码可读性,但布局效果需结合CSS实现。

    2025年6月8日
    100
  • 如何轻松打开HTML文件?

    在电脑上直接双击HTML文件或右键选择用浏览器(如Chrome、Edge)打开即可浏览网页内容;如需编辑代码,可用记事本、VS Code等文本编辑器打开修改。

    2025年6月4日
    300
  • HTML如何正确引入jQuery?

    在HTML中引入jQuery主要有两种方式:一是通过CDN链接直接引入在线版本,例如使用`;二是下载jQuery库文件到本地,通过相对路径引入,如,两种方法均需在或内添加`标签实现。

    2025年6月27日
    000
  • 如何快速使用HTML SVG?

    HTML SVG 是一种基于 XML 的矢量图形技术,可直接嵌入网页中绘制线条、形状、文本等,它支持缩放不失真、动画交互和样式控制,适用于图标、图表和数据可视化等场景。

    2025年6月20日
    100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN