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

如何用R抓取动态网站?芝加哥某校毕业率数据抓取遇阻求助

解决R抓取To&Through网站毕业率数据的方案

核心问题分析

你遇到的是典型动态渲染页面的数据抓取问题:该网站用React类前端框架构建,毕业率时间轴数据并非直接写入静态HTML,而是通过JavaScript动态生成DOM节点,因此SelectorGadget无法定位静态节点,常规rvest静态抓取失效;同时数据可能未通过独立API接口加载,而是直接嵌入页面初始化脚本中。


方案1:提取页面初始化脚本中的JSON数据(推荐)

这类SPA网站通常会把初始数据打包在页面的<script>标签里(比如window.__INITIAL_STATE__变量),直接提取解析即可,无需模拟浏览器:

library(rvest)
library(jsonlite)

# 目标URL
target_url <- "https://toandthrough.uchicago.edu/tool/cps/comm/2021/school/77/details/#/hs-graduation"

# 抓取静态页面源码
page_html <- read_html(target_url)

# 提取所有script标签文本,筛选包含初始化数据的脚本
all_scripts <- page_html %>% html_nodes("script") %>% html_text()
# 匹配包含毕业率或初始化状态的脚本(可根据实际内容调整关键词)
target_script <- grep("__INITIAL_STATE__|graduation", all_scripts, value = TRUE)[1]

# 清理JSON字符串:去掉开头的window变量声明和结尾的分号
cleaned_json <- gsub("^window\\.__INITIAL_STATE__\\s*=\\s*|;\\s*$", "", target_script)

# 解析JSON为R数据结构
site_data <- fromJSON(cleaned_json)

# 定位时间轴毕业率数据(需根据实际JSON结构调整路径,可通过str(site_data)查看层级)
graduation_timeline <- site_data$schoolDetails$graduation$timelineData
print(graduation_timeline)

方案2:模拟浏览器渲染抓取动态DOM

如果方案1无法找到数据,可通过模拟真实浏览器让JavaScript完全渲染页面,再抓取生成后的DOM节点:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前安装ChromeDriver并配置环境变量)
driver <- rsDriver(browser = "chrome", port = 4567L, verbose = FALSE)
remDr <- driver[["client"]]

# 访问目标页面并等待加载完成
remDr$navigate(target_url)
Sys.sleep(5) # 可根据网络情况调整等待时间

# 获取渲染后的页面源码
rendered_source <- remDr$getPageSource()[[1]]
rendered_page <- read_html(rendered_source)

# 使用SelectorGadget定位的节点提取数据(示例节点,需根据实际页面调整)
graduation_rates <- rendered_page %>% 
  html_nodes(".timeline-bar__value") %>% 
  html_text() %>% 
  as.numeric()

print(graduation_rates)

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

额外排查提示

  1. 重新检查开发者工具Network面板:切换到Fetch/XHR标签,刷新页面后仔细查看所有请求,部分API接口可能带有加密参数或隐藏在Document类型的请求中;
  2. 查看页面的robots.txt,确保抓取行为符合网站规则,避免被封禁;
  3. 如果使用方案1,可通过str(site_data)查看数据的完整层级结构,精准定位毕业率数据的存储路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:22:33