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

如何使用rvest爬取AEA网页下拉表格内的JEL分类关键词?

问题原因

该页面的表格内容属于动态渲染内容:初始静态HTML仅返回表头结构,分类条目、下拉关键词等内容要么是页面加载完成后通过JS异步请求填充,要么需要点击折叠按钮才会插入到DOM中,因此直接用rvest抓取静态源码只能拿到表头,无法获取内部条目内容。


解决方案1:动态渲染爬取

使用支持JS运行的浏览器模拟工具加载页面,等全部内容渲染完成后再提取数据。推荐用轻量的chromote包,无需复杂的Selenium环境配置,示例代码如下:

  1. 先安装依赖包:
install.packages(c("chromote", "rvest", "dplyr"))
  1. 爬取代码:
library(chromote)
library(rvest)
library(dplyr)

# 启动无头浏览器实例,加载目标页面
b <- ChromoteSession$new()
b$Page$navigate("https://www.aeaweb.org/jel/guide/jel.php")
# 等待页面加载完成,网络差可以适当调大数值
Sys.sleep(3)

# 模拟点击所有折叠按钮,展开全部下拉内容,可根据页面实际按钮类名修改选择器
b$Runtime$evaluate("
  document.querySelectorAll('.jel-expandable').forEach(el => el.click());
")
# 等待内容全部展开
Sys.sleep(2)

# 获取渲染完成的完整页面源码
full_html <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value %>% read_html()

# 方案A:提取所有表格内容
all_tables <- full_html %>% html_table(fill = TRUE)

# 方案B:直接提取所有以Keywords:开头的行文本
keywords_lines <- full_html %>%
  html_elements("tr") %>%
  html_text2() %>%
  grep("^Keywords:", ., value = TRUE)

# 关闭浏览器进程
b$close()

解决方案2:使用官方静态数据集(更稳定)

AEA官方公开了完整的JEL分类静态数据集,包含所有层级分类编码、分类名称、对应关键词,不需要爬取直接读取即可,比动态爬取效率高、稳定性强,支持CSV、JSON等多种格式,直接用read.csv()或jsonlite::read_json()就能解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:18:04