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

使用rvest爬取MLB选秀联盟roster表格返回空DataFrame求助

解决rvest爬取MLBDraft联盟 roster 表格返回空DataFrame的问题

问题原因

目标网站的球员名单表格是通过JavaScript动态渲染的,静态HTML里只有表格结构框架,没有实际的球员数据。rvest::read_html()只能抓取页面初始加载的静态内容,因此无法获取动态加载的表格数据,导致返回空的DataFrame。

解决方案

方法1:用RSelenium模拟浏览器加载页面

RSelenium可以模拟真实浏览器运行JavaScript,获取完全加载后的页面内容:

library(RSelenium)
library(rvest)
library(magrittr)

# 启动Chrome驱动(确保chromedriver版本与本地Chrome匹配,可从Chrome官网下载)
driver <- rsDriver(browser = "chrome", port = 4567L, verbose = FALSE)
remote_driver <- driver$client

# 访问目标页面
remote_driver$navigate("https://www.mlbdraftleague.com/mahoning-valley/roster")

# 等待页面完全加载(根据网络情况调整等待时间)
Sys.sleep(3)

# 获取加载完成后的页面源码
page_source <- remote_driver$getPageSource()[[1]]
page <- read_html(page_source)

# 提取表格数据
roster_tables <- page %>% html_table(fill = TRUE)

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

# 查看第一个表格(球员名单通常为第一个)
print(roster_tables[[1]])

方法2:直接调用数据接口(更高效)

通过浏览器开发者工具的「网络」面板,找到网站加载球员数据的API接口(通常是JSON格式),直接请求接口获取数据:

  1. 打开目标页面,按F12打开开发者工具,切换到「Network」标签
  2. 刷新页面,筛选「XHR」类型的请求,找到返回球员数据的API链接
  3. 使用jsonlite和httr请求接口并解析数据:
library(jsonlite)
library(httr)

# 替换为实际找到的API接口URL(需自行通过开发者工具确认)
api_url <- "https://www.mlbdraftleague.com/api/v1/roster/mahoning-valley"

# 发送请求并解析JSON数据
response <- GET(api_url)
roster_data <- fromJSON(content(response, "text"))

# 转换为DataFrame
roster_df <- as.data.frame(roster_data$roster)

print(roster_df)

注意事项

  • 使用RSelenium时,必须保证chromedriver版本与本地Chrome浏览器版本一致,否则会启动失败
  • 调用API时,部分网站可能需要设置User-Agent等请求头模拟浏览器,避免被拦截
  • 爬取数据需遵守网站robots.txt规则,避免频繁请求导致IP被封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:13:14