在R中将抓取的JSON格式字符串转为DataFrame:Winamax赛事数据爬取问题
解决Winamax动态数据解析与DataFrame转换问题
步骤1:补充依赖包
首先需要加载jsonlite用于JSON解析,tidyr处理嵌套数据:
library(dplyr) library(rvest) library(jsonlite) library(tidyr)
步骤2:正确提取并解析JSON数据
你之前的字符串替换逻辑有误,应保留完整JSON结构,仅移除JavaScript变量声明和结尾分号:
# 清理脚本文本,提取纯JSON内容 ext_clean <- ext %>% gsub("^var PRELOADED_STATE = ", "", .) %>% # 移除开头的变量声明 gsub(";$", "", .) # 移除结尾的分号 # 解析JSON为R列表 preloaded_state <- fromJSON(ext_clean)
步骤3:提取目标数据并转换为DataFrame
Winamax预加载数据中,赛事基本信息(球队名称)和赔率分别存储在eventCards和markets节点下,提取并合并这两部分数据:
# 提取赛事信息(球队名称) events_data <- preloaded_state$eventCards$entities %>% as.data.frame() %>% select(event_id = id, competitor1Name, competitor2Name) # 提取赔率数据并展开嵌套结构 odds_data <- preloaded_state$markets$entities %>% as.data.frame() %>% select(event_id = eventId, outcomes) %>% unnest(outcomes) %>% # 展开嵌套的赔率项 select(event_id, odds_type = name, odds = decimalOdds) # 合并赛事与赔率数据 final_df <- events_data %>% left_join(odds_data, by = "event_id")
说明
- 若网站预加载数据结构变化,可通过
str(preloaded_state)查看完整列表结构,调整提取路径。 - 最终的
final_df会包含每场赛事的两支球队名称,以及对应的各类赔率(如胜/平/负)。
内容的提问来源于stack exchange,提问作者M.O
相关产品推荐
相关产品推荐

