使用rvest抓取Sofascore法甲积分榜时指定div类名返回空节点集
问题:使用rvest抓取Sofascore法甲22/23赛季积分榜时无法获取目标div节点内容
想要使用rvest包抓取Sofascore网站上22/23赛季法甲的“Standings”积分榜表格。已知可通过类名读取HTML文本,但指定目标<div>的类名“sc-hLBbgP sc-eDvSVe gjJmZQ fRddxb sc-526d246a-0 evdGB”后,调用html_elements()返回空节点集{xml_nodeset (0)}。此前仅读取<div>元素时可正常获取HTML代码,请问为何无法获取该
节点中的文本信息?
当前代码:
library(rvest) URL <- "https://www.sofascore.com/tournament/football/france/ligue-1/34#42273" HTML <- read_html(URL) HTML %>% html_elements("div") %>% html_elements(".sc-hLBbgP sc-eDvSVe gjJmZQ fRddxb sc-526d246a-0 evdGB")
原因分析及解决方案
核心原因
- 动态内容渲染限制:Sofascore的积分榜内容是通过JavaScript动态加载的,
read_html()只能获取页面初始的静态HTML,无法捕获JS执行后生成的DOM节点,这是最主要的问题。 - CSS选择器语法错误:多个类名的CSS选择器需要用
.连接(表示元素同时拥有这些类),你代码中的空格是后代选择器语法,会被解析为“寻找拥有sc-hLBbgP类的元素下的sc-eDvSVe类元素”,而非同时包含所有指定类的div。 - 动态类名不可靠:你使用的类名(如
sc-hLBbgP、gjJmZQ)是前端框架生成的动态类名,这类名称会随网站更新、版本迭代变化,不能作为稳定的定位依据。
解决方案
方案1:使用动态页面抓取工具(RSelenium/playwright)
这类工具可以模拟浏览器执行JS,获取完整渲染后的页面内容。以RSelenium为例:
library(RSelenium) library(rvest) # 启动Chrome浏览器驱动(需提前配置好ChromeDriver环境) driver <- rsDriver(browser = "chrome") remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www.sofascore.com/tournament/football/france/ligue-1/34#42273") # 等待页面加载完成(可根据网络情况调整等待时间) Sys.sleep(3) # 获取渲染后的完整页面源码 page_source <- remDr$getPageSource()[[1]] HTML <- read_html(page_source) # 改用更稳定的定位方式,比如通过文本或结构定位积分榜板块 standings_div <- HTML %>% html_elements(xpath = "//div[contains(text(), 'Standings')]/../..") # 关闭浏览器驱动 remDr$close() driver$server$stop()
方案2:调用Sofascore官方API(推荐)
网站的积分榜数据通常来自API接口,直接请求API比抓取页面更高效稳定。通过浏览器开发者工具可找到对应的API链接,示例代码如下:
library(jsonlite) library(dplyr) # 22/23赛季法甲积分榜API链接(可通过浏览器网络请求捕获) api_url <- "https://api.sofascore.com/api/v1/tournament/34/season/42273/standings" # 请求并解析API数据 response <- fromJSON(api_url) standings_data <- response$standings[[1]]$rows # 转换为数据框并整理关键字段 standings_df <- standings_data %>% select(position, team, played, wins, draws, losses, goalsFor, goalsAgainst, points) %>% mutate(team_name = team$name) %>% select(-team) print(standings_df)
内容的提问来源于stack exchange,提问作者anyway01
相关产品推荐
相关产品推荐

