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

R使用rvest爬取PGA Tour大学排名表格时CSS选择器不生效问题

问题解决:PGA大学排名页面表格爬取空结果问题

问题根源

你使用read_html()获取内容后匹配不到目标td节点,核心原因是该页面的排名表格为JavaScript动态渲染生成的内容。read_html()只能拉取服务器返回的初始静态HTML代码,这部分静态内容中还没有加载出你要的.rank、.player、.name类的表格节点,因此选择器返回空字符结果。

可行解决方案(基于RSelenium动态渲染)

通过模拟浏览器运行的方式等待页面JS渲染完表格内容后再提取数据,和你原本的rvest操作逻辑兼容,学习成本更低:

1. 安装依赖包

install.packages(c("RSelenium", "rvest", "dplyr", "stringr"))

2. 可运行爬取代码

library(RSelenium)
library(rvest)
library(dplyr)
library(stringr)

# 启动Chrome浏览器驱动,chromever参数填你本地Chrome的对应版本号
driver <- rsDriver(browser = "chrome", chromever = "你的Chrome版本号", verbose = FALSE)
remDr <- driver$client

# 访问目标页面
remDr$navigate("https://www.pgatour.com/university/full-ranking.html")
# 等待页面加载完成,网络较慢可适当调大数值
Sys.sleep(3)

# 获取渲染完成的完整页面源码
page_source <- remDr$getPageSource()[[1]]
pgaU <- read_html(page_source)

# 按你找到的类名分别提取三列内容,去除多余空白符
rank <- html_nodes(pgaU, ".rank") %>% html_text() %>% str_trim()
player <- html_nodes(pgaU, ".player") %>% html_text() %>% str_trim()
university <- html_nodes(pgaU, ".name") %>% html_text() %>% str_trim()

# 合并为规范的数据框
pga_rank <- data.frame(
  Rank = rank,
  Player = player,
  University = university
)

# 运行完成后关闭浏览器和驱动进程
remDr$close()
driver$server$stop()

# 输出前几行验证结果
head(pga_rank)

补充说明

你可以在Chrome地址栏输入chrome://version/查看第一行的版本号,填入chromever参数即可。如果不需要保留浏览器运行过程,也可以给rsDriver添加extraCapabilities = list(chromeOptions = list(args = c('--headless', '--disable-gpu')))参数启用无头模式,后台静默运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:15:03