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

使用rvest爬取NRL赛事排名表返回NULL结果求排查

NRL官网2023赛季第27轮排名表爬取问题排查

问题根源分析

你的代码返回NULL,大概率是以下两个原因:

  1. 页面元素结构已变更:原代码依赖的div.vue-ladder节点或q-data属性已不存在,静态HTML里找不到目标数据。
  2. 数据动态加载:NRL官网用前端框架动态渲染排名数据,read_html只能获取初始静态页面,无法捕获动态加载的内容。

解决方法

方法1:重新定位页面元素(仅适用于数据仍在静态HTML的情况)

  1. 打开目标页面,按F12调出开发者工具,切换到「Elements」面板。
  2. 用选择器工具定位排名表对应的DOM节点,确认新的类名/属性名。
  3. 更新代码中的html_nodes和html_attr参数,示例如下(需替换为实际找到的节点信息):
library(rvest)
library(jsonlite)

url <- "https://www.nrl.com/ladder/?competition=111&round=27&season=2023"
page <- read_html(url) 
contentnodes <- page %>% html_nodes("div.ladder-container") %>% 
  html_attr("data-ladder") %>% jsonlite::fromJSON()

方法2:直接调用API接口(推荐,更稳定)

NRL官网的排名数据通常通过后端API接口加载,抓包获取接口后直接请求更可靠:

  1. 打开开发者工具的「Network」面板,刷新页面,筛选「XHR/Fetch」类型请求。
  2. 搜索包含「ladder」「rank」等关键词的请求,找到返回排名数据的接口(地址通常类似https://api.nrl.com/v2/ladder,参数包含competition、round、season)。
  3. 用httr直接请求接口:
library(httr)
library(jsonlite)

# 替换为实际抓包得到的API地址
api_url <- "https://api.nrl.com/v2/ladder?competitionId=111&round=27&season=2023"
# 模拟浏览器请求头避免反爬
headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
)
response <- GET(api_url, headers)
ladder_data <- fromJSON(content(response, "text"))

方法3:处理反爬拦截

如果静态页面请求被拦截,需在请求中添加浏览器UA:

library(rvest)
library(jsonlite)

url <- "https://www.nrl.com/ladder/?competition=111&round=27&season=2023"
page <- read_html(GET(url, add_headers("User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")))
# 重新定位元素后提取
contentnodes <- page %>% html_nodes("更新后的选择器") %>% html_attr("更新后的属性") %>% fromJSON()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:52:27