使用Jsoup获取游戏统计网站h1标签内容为空问题咨询
你遇到的标签内容为空的核心原因是:这些h1标签里的胜率、MVP次数、对局场数等数据,是页面加载完成后由JavaScript动态请求接口、再填充到标签里的。Jsoup默认只能获取服务器返回的原始静态HTML,不会执行页面的JS逻辑,因此无法拿到动态渲染后的内容。你之前能拿到的IGN、段位、等级这些属于静态渲染在页面里的内容,所以可以正常获取。
解决方案1:直接调用后端数据接口(更推荐)
这种方法性能最高、稳定性最好,不需要解析HTML:
- 打开浏览器的开发者工具(F12),切换到「网络」面板,筛选「Fetch/XHR」类型的请求
- 刷新目标页面,逐个查看请求的响应内容,找到返回胜率、MVP、对局数等统计数据的接口
- 直接用Java发送HTTP请求调用该接口,解析返回的JSON数据即可拿到目标字段
解决方案2:使用支持JS渲染的爬取工具
如果找不到对应接口,可以用无头浏览器工具模拟浏览器完整的页面加载逻辑,等JS执行完成后再提取内容,常用工具可选HtmlUnit、Selenium、Playwright等,以下是HtmlUnit的示例代码:
// 引入HtmlUnit依赖后使用 WebClient webClient = new WebClient(BrowserVersion.CHROME); // 配置关闭不必要的报错、启用JS webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setCssEnabled(false); // 加载页面,等待JS渲染完成 HtmlPage page = webClient.getPage("https://na.wildstats.gg/en/profile/60ae4f204a9aa2000f3d5f33"); webClient.waitForBackgroundJavaScript(3000); // 等待3秒让JS执行完成 // 现在可以拿到渲染后的内容了 DomNodeList<DomElement> winRates = page.getElementsByClass("text-center m-0"); for (DomElement element : winRates) { System.out.println(element.getTextContent()); } webClient.close();
注意事项
- 请求时建议带上合法的User-Agent头,避免被网站的反爬策略拦截
- 爬取数据请遵守目标网站的使用协议和robots规则,控制请求频率避免对服务器造成压力
内容的提问来源于stack exchange,提问作者ciddy
相关产品推荐
相关产品推荐

