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

使用R爬取NBA.com球队对手投篮表格失败,求正确方法

解决R爬取NBA官网球队对手投篮数据表格的问题

NBA官网的球队对手投篮数据是动态加载的,read_html()只能获取页面初始的静态HTML,而静态内容里的表格是页面上的日历控件,并非目标数据表格。以下是两种可行的解决方案:

方案一:直接调用NBA Stats API(推荐)

NBA Stats页面的数据本质是通过官方API接口返回的,直接请求API比爬取页面更高效稳定。

代码示例

# 安装依赖包(首次运行需安装)
install.packages(c("httr", "jsonlite"))

library(httr)
library(jsonlite)

# API接口地址,对应球队对手投篮数据
api_url <- "https://stats.nba.com/stats/leaguedashteamopponentshooting"

# 请求参数:可根据需求修改赛季、赛季类型等
request_params <- list(
  LeagueID = "00",          # NBA联盟ID固定为00
  Season = "2024-25",       # 赛季格式:YYYY-YY
  SeasonType = "Regular Season", # 赛季类型:常规赛/季后赛等
  PerMode = "PerGame"       # 数据统计模式:场均/总计等
)

# 设置请求头,模拟浏览器访问(NBA API会验证请求来源)
request_headers <- add_headers(
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  `Referer` = "https://www.nba.com/stats/"
)

# 发送请求并解析JSON数据
response <- GET(api_url, query = request_params, request_headers)
json_data <- fromJSON(content(response, "text"))

# 提取表格数据并设置列名
target_table <- as.data.frame(json_data$resultSets[[1]]$rowSet)
colnames(target_table) <- json_data$resultSets[[1]]$headers

# 查看前几行数据
head(target_table)

说明

  • 可以通过修改Season和SeasonType参数获取不同赛季的数据
  • API返回的字段完整,无需额外清洗页面数据

方案二:用RSelenium模拟浏览器加载动态内容

如果不想查找API,可通过模拟浏览器渲染页面,获取动态生成的目标表格。

代码示例

# 安装依赖包(首次运行需安装)
install.packages(c("RSelenium", "rvest"))

library(RSelenium)
library(rvest)

# 启动Chrome浏览器驱动(需提前安装Chrome及对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remote_driver <- driver[["client"]]

# 导航到目标页面
remote_driver$navigate("https://www.nba.com/stats/teams/opponent-shooting")

# 等待页面加载完成(网络慢可延长等待时间)
Sys.sleep(5)

# 获取渲染后的页面HTML,定位目标表格
page_source <- remote_driver$getPageSource()[[1]]
page <- read_html(page_source)
target_table <- page %>% 
  html_element(css = "#__next main .Layout_mainContent__2z_rb div section div:nth-child(2) .Table_container__E2p5t table") %>% 
  html_table(fill = TRUE)

# 关闭浏览器驱动
remote_driver$close()
driver$server$stop()

# 查看前几行数据
head(target_table)

注意事项

  • 需要确保Chrome浏览器和ChromeDriver版本匹配,否则驱动无法启动
  • 页面结构可能随官网更新变化,若css选择器失效,需重新在浏览器开发者工具中定位表格的选择器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:43:16