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

使用R爬取QS2021世界大学排名遇JSON错误,求数据转数据框方法

QS 2021世界大学排名爬取报错解决及数据提取方案

错误原因

你使用的JSON数据链接已失效,QS官网会定期更新数据文件的存储路径与参数,导致原请求返回的不是有效JSON内容,因此jsonlite::fromJSON()抛出Argument 'txt' must be a JSON string, URL or file错误。

两种可行解决方法

方法一:获取最新JSON数据源链接

  1. 打开QS 2021排名页面,按F12打开浏览器开发者工具。
  2. 切换至「Network」标签页,刷新页面,在筛选栏输入json或rank定位返回JSON格式数据的请求。
  3. 复制该请求的完整URL,替换到代码中执行:
library(httr)
library(jsonlite)

# 替换为你找到的有效JSON数据源URL
response <- GET("新的JSON数据源URL")

# 先验证请求是否成功
if (response$status_code == 200) {
  # 以文本形式获取响应内容
  data_json <- content(response, as = "text", encoding = "UTF-8")
  data <- jsonlite::fromJSON(data_json)
  df <- as.data.frame(data)
} else {
  stop("请求失败,状态码:", response$status_code)
}

方法二:直接爬取页面表格(稳定性更高)

如果找不到有效API链接,可使用rvest直接解析页面排名表格。若表格为动态加载(需滚动显示更多内容),则结合RSelenium模拟浏览器操作:

静态表格爬取(适用于已加载完整表格的场景)

library(rvest)
library(dplyr)

url <- "https://www.topuniversities.com/university-rankings/world-university-rankings/2021"

# 读取页面并提取表格
page <- read_html(url)
df <- page %>%
  html_element("table") %>%
  html_table(fill = TRUE)

# 清理数据(按需调整列选择与过滤规则)
df <- df %>%
  filter(!is.na(Rank)) %>%
  select(Rank, University, Location, `Overall Score`)

动态表格爬取(处理滚动加载内容)

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

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

# 访问目标页面
remDr$navigate("https://www.topuniversities.com/university-rankings/world-university-rankings/2021")

# 模拟滚动加载所有内容
for (i in 1:10) {
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  Sys.sleep(2) # 等待页面加载
}

# 提取页面源码并解析表格
page_source <- remDr$getPageSource()[[1]]
page <- read_html(page_source)
df <- page %>%
  html_element("table") %>%
  html_table(fill = TRUE)

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

# 数据清理
df <- df %>%
  filter(!is.na(Rank)) %>%
  select(Rank, University, Location, `Overall Score`)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:48:07