0

0

Jsoup 无法获取 span 元素文本内容的常见原因与解决方案

聖光之護

聖光之護

发布时间:2026-01-28 21:47:00

|

444人浏览过

|

来源于php中文网

原创

Jsoup 无法获取 span 元素文本内容的常见原因与解决方案

jsoup 解析静态 html 时能正确抓取元素,但若目标内容由 javascript 动态渲染(如 react/vue 渲染的 spa 页面),则 jsoup 获取的是初始 html,其中目标 span 可能为空或仅含加载占位符(如 spinner),导致 `.text()` 返回空字符串。

你遇到的问题——doc.getElementsByClass("js-summary-whole-engagement") 返回 ,且 .text() 输出为空——根本原因并非 Jsoup 语法错误,而是页面内容动态生成

访问 https://www.php.cn/link/325f53e3727938dc321cafd8b8ce8dcb 并查看源码(右键 → “查看页面源代码”),你会发现:原始 HTML 中该 标签内确实不包含 4,300 这个数字,而仅存在一个加载中的 图标。实际数值是通过 AJAX 请求后端 API 获取,并由前端 JavaScript 注入 DOM 的。Jsoup 是一个纯 HTML 解析器,不执行 JavaScript,因此它永远无法获取 JS 渲染后的内容。

✅ 正确理解你的代码问题:

  • engagements.get(0).text()(注意:Elements 是 List不是数组,不能用 engagement[0])——这是常见误区。Java 中应使用 engagements.first().text() 或 engagements.get(0).text()(需确保非空);
  • 但即使修正语法,仍会得到空值,因为原始 HTML 中本就没有该文本。

? 验证方式(推荐):

PictoGraphic
PictoGraphic

AI驱动的矢量插图库和插图生成平台

下载
// 检查是否真有该元素,及其完整 HTML 结构
Elements engagements = doc.getElementsByClass("js-summary-whole-engagement");
if (!engagements.isEmpty()) {
    Element e = engagements.first();
    System.out.println("Outer HTML: " + e.outerHtml()); // 查看真实内容
    System.out.println("Text content: '" + e.text().trim() + "'"); // 带引号便于观察空格/空串
} else {
    System.out.println("⚠️ 未找到 class='js-summary-whole-engagement' 的元素");
}

? 真实可行的解决方案:

  1. 绕过前端,直连数据接口(推荐 ✅)
    打开浏览器开发者工具(F12)→ Network → 刷新页面 → 搜索关键词 engagement 或筛选 XHR/Fetch 请求 → 找到返回 4,300 的 API(例如类似 https://analisa.io/api/v1/profile/officialrickastley/summary)。
    使用 Jsoup 或更合适的 HTTP 客户端(如 OkHttp)直接请求该 API(注意携带 Cookie、Authorization 或 Referer 等必要 Header)。

  2. 使用无头浏览器(如 Selenium + ChromeDriver)
    若无法定位 API 或接口受复杂鉴权保护,可借助浏览器自动化执行 JS 后再提取:

    WebDriver driver = new ChromeDriver();
    driver.get("https://www.php.cn/link/325f53e3727938dc321cafd8b8ce8dcb");
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(
        By.className("js-summary-whole-engagement")
    ));
    String value = el.getText().replace(",", ""); // 如需数值计算,去除千分位逗号
    System.out.println("Engagement: " + value); // 输出: Engagement: 4300
    driver.quit();

⚠️ 注意事项:

  • Jsoup.connect(...).get() 默认不启用 JavaScript,也不等待异步加载完成;
  • 设置 User-Agent 仅解决基础反爬,无法绕过 JS 渲染逻辑;
  • doc.select("span.js-summary-whole-engagement") 与 getElementsByClass 效果一致,选择器写法更灵活,但本质限制相同;
  • 生产环境每日自动采集时,优先分析并调用稳定 API,避免依赖 UI 层(易因前端改版失效)。

? 总结:
Jsoup 不是“找不到”值,而是目标值根本不存在于服务端返回的原始 HTML 中。与其调试选择器语法,不如打开 Network 面板定位真实数据接口——这才是高效、健壮、可维护的爬虫实践核心。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

159

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

234

2024.09.24

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6427

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

347

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

92

2025.08.19

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 7.3万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号