You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java网页爬虫问题:获取Betting View点击后网格数据时返回null

你的爬取代码存在几个关键问题,无法正常获取目标数据,具体分析和修复方案如下:

1. 目标URL构造错误

你当前的teamLink是https://www.teamrankings.com/nba/team/cleveland-cavaliers/.betting,这里多了一个不必要的点号。正确的Betting View页面URL应该是https://www.teamrankings.com/nba/team/cleveland-cavaliers/betting——直接在原球队URL后追加/betting即可。

2. XPath选择器写法错误

你使用的div.btn-group是CSS选择器的语法,但HtmlUnit的getFirstByXPath方法需要的是XPath表达式,正确的写法应该是//div[@class='btn-group']:

  • //表示从整个文档范围内查找匹配节点,而非从当前节点开始
  • [@class='btn-group']明确指定要匹配class属性为btn-group的div元素,避免匹配到无关节点

3. 代码逻辑冗余且顺序不合理

你同时初始化了Jsoup的Document和HtmlUnit的WebClient,但实际上只需要用HtmlUnit处理动态交互即可,Jsoup在这里属于冗余代码。另外,你在获取div元素前没有等待页面JavaScript渲染完成,这会导致目标元素还未生成就被查找,自然返回null。

修复后的示例代码

String teamLink = "https://www.teamrankings.com/nba/team/cleveland-cavaliers/betting";
// 初始化HtmlClient并配置优化项
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_45);
webClient.getOptions().setCssEnabled(false); // 禁用CSS加载提升速度
webClient.getOptions().setJavaScriptEnabled(true); // 启用JS以支持页面动态渲染
webClient.getOptions().setThrowExceptionOnScriptError(false); // 忽略JS执行错误,避免程序中断
webClient.waitForBackgroundJavaScript(3000); // 等待3秒让JS完成页面渲染

// 获取目标页面
HtmlPage page = webClient.getPage(teamLink);

// 使用正确的XPath查找目标div
final HtmlDivision div = page.getFirstByXPath("//div[@class='btn-group']");
if (div != null) {
    page = div.click();
    // 点击后再次等待JS渲染,确保网格数据加载完成
    webClient.waitForBackgroundJavaScript(2000);
    // 此处可添加代码提取网格数据,比如解析table元素
    System.out.println("点击成功,可开始提取网格数据");
} else {
    System.out.println("未找到目标btn-group元素");
}

// 关闭webClient释放资源
webClient.close();

额外提示

  • 部分网站存在反爬机制,频繁请求可能会被封禁IP,建议添加请求间隔,或模拟真实浏览器的请求头信息
  • 如果点击后的数据是通过AJAX异步加载的,直接分析接口获取数据会比模拟点击更高效稳定

内容的提问来源于stack exchange,提问作者manderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:06:52