请求排查R语言爬取Cleaning The Glass投篮数据表格失败问题
爬取cleaningtheglass.com球员投篮数据的问题排查与解决
你代码里的直接错误
- 变量名不匹配:你用
webpage <- url %>% read_html()定义了页面对象,但提取节点时写的是table_data <- page %>% html_nodes(...),这里的page是未定义的变量,会直接导致报错,需要改成webpage %>%。
核心问题:动态内容无法被静态爬取工具捕获
cleaningtheglass.com的球员数据表格是通过JavaScript动态渲染加载的,rvest::read_html()只能获取页面初始的静态HTML源码,无法捕获JS执行后生成的动态内容——这才是你拿不到表格数据的关键原因。
解决办法:使用支持JS渲染的爬取工具
要获取动态加载的内容,你需要用能模拟浏览器运行JS的R包,比如RSelenium或playwright,以下是RSelenium的示例代码(需提前安装对应浏览器驱动,比如ChromeDriver):
library(RSelenium) library(rvest) library(tidyverse) # 启动Chrome浏览器驱动 driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://cleaningtheglass.com/stats/players?stat_category=shooting_overall#/") # 等待页面完全加载(可根据网络情况调整等待时间) Sys.sleep(5) # 获取渲染后的页面源码 page_source <- remDr$getPageSource()[[1]] webpage <- read_html(page_source) # 提取表格(可根据实际渲染后的页面结构调整CSS选择器) table_data <- webpage %>% html_nodes("#shooting_overall .stat_table_container") %>% html_table() # 关闭浏览器和驱动 remDr$close() driver$server$stop()
额外注意事项
- 该网站存在反爬机制,频繁请求可能会被封禁IP,建议添加请求间隔、使用代理IP。
- 爬取前请遵守网站的
robots.txt和使用条款,避免违规爬取行为。
内容的提问来源于stack exchange,提问作者Ari Eizen
相关产品推荐
相关产品推荐

