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

如何使用rvest爬取网页点击触发的弹窗说明文本?

抓取失败原因

你使用read_html()执行的是静态页面爬取,只能获取页面初始加载的HTML源码。目标弹窗#definitionBoxText的文本内容是JavaScript动态生成的:只有点击对应经济变量旁的按钮时,前端JS才会将对应变量的说明数据填充到该节点中,初始状态下节点内容为空,因此静态爬取无法拿到目标内容。

解决方法

方案1:抓取后台接口(效率更高)

  • 打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR请求,点击任意变量旁的按钮,查看触发的说明数据请求,分析接口的请求参数和返回格式
  • 直接用httr包构造对应变量的接口请求,解析返回的JSON/文本数据即可,无需渲染整个页面,抓取效率远高于模拟浏览器

方案2:动态模拟浏览器操作

如果接口加密或分析难度高,可以使用R的动态爬虫工具模拟用户点击操作,等内容渲染后再提取:

# 依赖包安装:install.packages(c("chromote", "magrittr"))
library(chromote)
library(magrittr)

# 启动无头浏览器
browser <- ChromoteSession$new()
# 访问目标页面
browser$Page$navigate("https://www.theglobaleconomy.com/download-data.php")
# 等待页面加载完成
Sys.sleep(3)

# 示例:点击第一个经济变量对应的i按钮,可根据需求循环替换对应元素的选择器
browser$Runtime$evaluate('document.querySelectorAll(".indInfo")[0].click()')
# 等待弹窗内容填充
Sys.sleep(0.5)

# 提取弹窗说明文本
def_text <- browser$Runtime$evaluate(
  'document.querySelector("#definitionBoxText").innerText'
)$result$value
print(def_text)

# 关闭浏览器
browser$close()

提示:批量抓取时请控制请求间隔,遵守站点的使用规则,避免触发反爬限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:24:00