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

rvest爬取Covers网站NBA球员URL失效,咨询原因与解决方法

问题排查与解决方法

首先明确:rvest的html_attr/html_nodes用法没有变化,问题出在Covers网站的页面结构更新了,你的旧代码依赖的HTML结构已经不存在。

具体原因分析

现在访问目标阵容页面,查看HTML结构会发现:

  • 球员的专属链接不再是页面中所有<a>标签里随便包含/players/的类型,而是被包裹在特定容器元素内,且<a>标签带有专属类名(比如当前页面中,球员名字的链接类为PlayerCard_playerName__3Y7Yl);
  • 另一种可能是部分内容通过JavaScript动态渲染,read_html()只能抓取页面初始加载的静态HTML,动态加载的内容无法直接获取。

修复方案

方案1:针对静态可抓取结构,使用精准CSS选择器

先通过浏览器开发者工具(F12)定位到球员链接的<a>标签,找到其专属选择器,修改代码如下:

library(rvest)
library(tidyverse)

covers_page <- "https://www.covers.com/sport/basketball/nba/teams/main/boston-celtics/2022-2023/roster"
tmp <- read_html(covers_page)

# 用精准CSS选择器定位球员链接
href <- tmp %>% 
  html_nodes(".PlayerCard_playerName__3Y7Yl") %>% 
  html_attr("href") %>% 
  as_tibble_col(column_name = "value") %>% 
  filter(grepl("/players/", value))

方案2:处理动态加载内容(若静态抓取失效)

如果发现页面球员数据是AJAX动态加载的,read_html()无法获取,需使用模拟浏览器渲染的工具,比如RSelenium,示例代码如下:

library(RSelenium)
library(rvest)
library(tidyverse)

# 启动Chrome浏览器驱动(需提前安装对应版本的chromedriver)
driver <- rsDriver(browser = "chrome")
remDr <- driver[["client"]]

# 访问目标页面并等待加载完成
remDr$navigate("https://www.covers.com/sport/basketball/nba/teams/main/boston-celtics/2022-2023/roster")
Sys.sleep(3)

# 获取渲染后的页面源码并解析
page_source <- remDr$getPageSource()[[1]]
tmp <- read_html(page_source)

# 抓取球员链接
href <- tmp %>% 
  html_nodes(".PlayerCard_playerName__3Y7Yl") %>% 
  html_attr("href") %>% 
  as_tibble_col(column_name = "value") %>% 
  filter(grepl("/players/", value))

# 关闭驱动
remDr$close()
driver$server$stop()

注意事项

  • 网站HTML结构可能频繁更新,后续若再次失效,需重新用开发者工具定位最新选择器;
  • 爬取前请遵守网站robots.txt协议与使用条款,避免触发反爬机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:38