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

R语言使用XML包读取HTML网站表格报错及多赛季数据爬取咨询

问题1解答

  • 核心错误原因:你要爬取的NBA stats站点表格是JavaScript动态渲染的,直接发起HTTP请求拿到的原始HTML源码中没有完整的表格节点数据,XML包的readHTMLTable只能解析静态HTML内容,无法处理前端动态加载的数据,所以该方案本身不适用当前场景。此外你的代码存在笔误:参数是stringsAsFactors而非stringAsFactors,不过这不是触发本次报错的核心原因。
  • XML包不适用于该场景,它仅支持静态HTML/XML解析,无法处理依赖JS渲染的动态页面内容。

问题2解答

报错的逻辑链是:

  1. 最先触发的警告XML content does not seem to be XML: 'Season'是因为你请求返回的原始内容不是标准的XML/静态HTML结构,readHTMLTable解析失败返回了NULL值。
  2. 后续的报错unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"NULL"’是因为readHTMLTable接收到的输入值为NULL,没有对应处理NULL输入的方法,所以抛出该错误。

问题3解答

最高效的方案是直接调用站点的后端数据接口,无需解析前端页面:

  • 打开浏览器控制台的网络面板,筛选XHR请求,切换赛季时可以抓到对应的官方数据接口,接口参数中Season对应赛季值,SeasonType对应常规赛/季后赛类型。
  • 首先生成2004-05到2020-21的赛季参数列表,可通过paste0(2004:2020, "-", substr(2005:2021, 3, 4))快速生成。
  • 用httr包循环遍历每个赛季参数发起请求,拿到返回的JSON数据后用jsonlite包解析为数据框即可,批量请求时注意添加1-2秒的间隔,避免请求频率过高被站点限制IP。
  • 如果你需要模拟前端操作,也可以用RSelenium或rvest配合无头浏览器加载页面,等JS渲染完成后再提取表格,但该方案效率远低于直接调用接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:45:03