使用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
相关产品推荐
相关产品推荐

