在R中提取FIBA新版赛事页面比赛数据的技术问询
FIBA赛事数据抓取解决方案
1. 更易提取数据的位置
- 优先查全局变量:FIBA官网这类现代前端项目,通常会把初始渲染数据存在
window.__INITIAL_STATE__这类全局变量里,浏览器控制台输入这个变量名就能查看,里面基本包含play-by-play、投篮坐标、技术统计等完整数据。用R抓取时,提取对应script内容后匹配这个变量的JSON部分,比依赖固定索引的xpath(比如script[47])更稳定——毕竟页面更新时script标签位置可能变。 - 重新排查Network请求:之前没找到的话,试试在Network面板过滤
JSON类型请求,或者搜带game、stats、playbyplay关键词的接口。有些数据是页面加载后异步拉取的,直接请求这类接口比解析页面高效得多。
2. 解析指定script节点内容为表格
针对你找到的script节点,按以下步骤处理:
- 提取脚本文本并清理转义字符
- 匹配出play-by-play的JSON片段
- 解析JSON并转成表格
具体R代码示例:
library(rvest) library(jsonlite) library(stringr) page_url <- 'https://www.fiba.basketball/en/events/fiba-americup-2025-qualifiers/games/120186-DOM-MEX#shotChart' my_session <- session(page_url) # 提取script内容(注意:如果页面更新导致script索引变化,需调整xpath) script_text <- my_session %>% html_nodes(xpath = '/html/body/script[47]/text()') %>% html_text() # 清理多余的反斜杠 clean_text <- gsub("\\\\", "", script_text) # 匹配play-by-play的JSON数据(若键名不是playByPlay,可打印clean_text查看后调整) pbb_match <- str_match(clean_text, '"playByPlay":\\s*(\\[.*?\\])') if (!is.na(pbb_match[1,2])) { # 解析JSON并转成表格 pbb_data <- fromJSON(pbb_match[1,2]) pbb_table <- as.data.frame(pbb_data) print(pbb_table) } else { message("未找到play-by-play数据,请检查正则表达式或脚本内容") }
注:投篮坐标通常嵌套在play-by-play的事件字段里(比如投篮事件的shot属性),解析成表格后可直接提取对应列。
内容的提问来源于stack exchange,提问作者bonstance13
相关产品推荐
相关产品推荐

