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

使用rvest无法读取完整表格,是否需学习RSelenium?

问题解决思路

为什么静态抓取拿不到完整数据

  • 页面里的晚场赛事数据是动态加载的:初始HTML只包含部分内容,剩下的需要通过JavaScript渲染(比如滚动到底部触发加载,或是页面初始化后异步拉取数据)
  • read_html()只能获取服务器返回的初始静态HTML,无法执行JS,自然拿不到动态加载的内容

要不要学RSelenium?

不一定非要先学RSelenium,优先试试更高效的方案:

方案1:查找页面的API接口(推荐)

很多动态网站会通过API接口获取数据,直接请求API比模拟浏览器更轻量高效:

  1. 打开目标页面,按F12调出浏览器开发者工具
  2. 切换到「Network」面板,刷新页面
  3. 筛选「XHR」或「Fetch」类型的请求,查看响应内容,找到包含完整球员数据的接口
  4. 找到后,用R的httr::GET()或jsonlite::fromJSON()直接请求该接口,就能拿到完整数据

方案2:用RSelenium(找不到API时再用)

如果确实没有公开的API接口,再用RSelenium模拟浏览器加载完整页面:

  • 先安装依赖包和对应浏览器的驱动(比如ChromeDriver)
  • 示例代码:
# 安装依赖包
install.packages("RSelenium")
library(RSelenium)
library(rvest)

# 启动Chrome浏览器驱动
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 打开目标页面
remDr$navigate("https://www.fantasypros.com/daily-fantasy/mlb/draftkings-salary-changes.php")

# 模拟滚动到底部触发加载(多次滚动确保内容加载完全)
remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
Sys.sleep(2) # 等待加载
remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
Sys.sleep(2)

# 抓取渲染后的页面并解析表格
page_source <- remDr$getPageSource()[[1]]
fantasyHtml <- read_html(page_source)
pitchersTable <- fantasyHtml %>% html_table()

# 关闭浏览器和驱动
remDr$close()
driver$server$stop()

注意事项

  • 使用RSelenium时,要保证浏览器版本和驱动版本匹配,否则会出现启动失败的问题
  • 频繁请求可能触发网站反爬机制,建议添加合理的等待间隔

内容的提问来源于stack exchange,提问作者sjcasr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:02:43