当前位置:首页 > 前端开发 > 正文

如何用jsoup快速解析HTML?

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

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


核心功能解析

  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 语法精准定位元素:

  2. DOM 树遍历

    通过父子节点关系操作:

    Element body = doc.body(); Element firstDiv = body.child(0); // 获取第一个子元素 Element parent = firstDiv.parent(); // 获取父元素
  3. 高级数据操作技巧

    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() // 白名单规则 );

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


    实战示例:爬取新闻标题

    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 协议及法律法规。

0