使用rvest爬取Covers.com凯尔特人赛程数据时节点定位失败求助
解决rvest爬取Covers.com凯尔特人赛季数据的节点定位问题
问题核心
Covers.com的页面内容多为动态加载,直接用read_html()获取的静态HTML里并不包含你要的赛程/结果表格,所以无论尝试哪个ID都会返回xml_missing错误。
可行解决方案
1. 用RSelenium获取动态渲染页面
模拟浏览器加载完整页面,获取包含动态内容的源码:
library(RSelenium) library(rvest) # 启动Chrome驱动(需提前安装对应版本的ChromeDriver) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 url <- "https://www.covers.com/sport/basketball/nba/teams/main/boston-celtics/2022-2023" remDr$navigate(url) # 等待页面完全加载(可根据网络情况调整等待时间) Sys.sleep(5) # 获取渲染后的页面源码 page_source <- remDr$getPageSource()[[1]] html <- read_html(page_source) # 关闭驱动 remDr$close() driver$server$stop()
2. 定位正确的表格节点
在动态渲染后的页面中,赛程表格的有效选择器为table[data-testid="schedule-table"],提取表格代码如下:
# 提取赛季赛程表格 schedule_table <- html %>% html_element('table[data-testid="schedule-table"]') %>% html_table(header = TRUE) # 查看数据示例 head(schedule_table)
3. 高效备选:直接调用API接口
打开浏览器开发者工具的「网络」标签,刷新页面后筛选XHR/fetch请求,可找到返回赛程数据的API接口(类似/api/teams/boston-celtics/schedule/2022-2023),直接请求接口获取JSON数据,解析后即可得到结构化内容,无需处理HTML节点。
注意事项
- 频繁爬取可能触发反爬机制,建议添加请求间隔,避免短时间内多次请求。
- 网站节点或API可能随时变更,需定期验证目标元素或接口有效性。
内容的提问来源于stack exchange,提问作者gimmethedata123
相关产品推荐
相关产品推荐

