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

使用rvest爬取JHU新冠日度数据仅返回占位符的问题咨询

问题根源

这是动态渲染页面爬取的典型问题:JHU官网的新冠统计数据并未嵌入在初始静态HTML中,而是页面加载完成后由JavaScript异步请求后台数据、再渲染到对应DOM节点的。rvest的read_html()只会请求并解析初始静态HTML,不会执行页面的JS逻辑,因此只能拿到预先生成的Loading...占位符。

解决方案1:使用RSelenium模拟浏览器动态渲染

RSelenium可以调用本地浏览器驱动,模拟真实用户访问页面的行为,等待JS执行完成、数据渲染完毕后再提取节点内容,具体操作如下:

  • 前置准备:
    1. 安装RSelenium包:运行install.packages("RSelenium")
    2. 下载与本地Chrome浏览器版本匹配的ChromeDriver,放置到系统可识别的路径中
  • 参考爬取代码:
library(RSelenium)
library(rvest)

# 启动Chrome驱动,chromever参数替换为你下载的ChromeDriver对应版本号
driver <- rsDriver(browser = "chrome", chromever = "xxx", port = 4545L)
remDr <- driver$client

# 访问目标页面
remDr$navigate("https://coronavirus.jhu.edu/")
# 等待页面数据渲染完成,可根据网络情况调整等待时长
Sys.sleep(3)

# 获取渲染后的完整页面源码
page_source <- remDr$getPageSource()[[1]]
website <- read_html(page_source)

# 提取目标figure节点的统计数据
cases <- website %>% html_nodes(css = "figure")
cases

# 爬取完成后关闭驱动释放资源
remDr$close()
driver$server$stop()
  • 优化建议:如果固定等待时长仍无法拿到数据,可改用显式等待逻辑,判断目标统计数值节点完成渲染后再执行提取操作。
解决方案2:直接请求数据接口

你可以通过浏览器开发者工具的网络面板,筛选出页面请求统计数据的后端接口,直接调用接口获取结构化的JSON数据,不需要解析HTML,爬取效率更高,也不易受前端页面结构调整影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:45:05