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

在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节点,按以下步骤处理:

  1. 提取脚本文本并清理转义字符
  2. 匹配出play-by-play的JSON片段
  3. 解析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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:22