无需RSelenium,如何用R抓取巴西央行网页中的表格?
问题:抓取动态加载的网页表格(无需RSelenium)
想要抓取巴西央行网站的通胀目标历史表格:https://www.bcb.gov.br/controleinflacao/historicometas。使用rvest::read_html或httr::GET获取页面源码时看不到表格内容,但在Chrome开发者工具的Elements标签中能找到表格元素。
尝试了以下代码:
library(tidyverse) library(rvest) url <- "https://www.bcb.gov.br/controleinflacao/historicometas" res <- url %>% read_html() %>% html_node("table")
结果返回{xml_nodeset (0)}。经确认表格是通过页面脚本动态加载的,已知可使用RSelenium解决,但希望找到无需RSelenium的抓取方法。
参考相关问题:
- 抓取所有元素都在
<app-root>标签内的网页(R语言) - 抓取网页表格返回空结果(Python示例)
解决方案:直接调用后台API获取数据
这类基于前端框架(从页面的<app-root>标签可判断是Angular)的页面,表格数据通常通过AJAX请求从后台API拉取,无需模拟浏览器渲染。具体步骤:
定位数据接口:打开Chrome开发者工具的「网络」面板,刷新页面后筛选「XHR/Fetch」请求,可找到返回表格数据的接口:
https://www.bcb.gov.br/api/servico/sitebcb/historicometas用R请求API并解析数据:
library(tidyverse) library(httr) library(jsonlite) # 发送API请求 api_url <- "https://www.bcb.gov.br/api/servico/sitebcb/historicometas" resp <- GET(api_url) # 解析JSON并转为表格格式 table_data <- content(resp, "text") %>% fromJSON() %>% pluck("conteudo") %>% as_tibble() # 查看数据结构 glimpse(table_data)
这种方法直接获取结构化的原始数据,比解析动态渲染的页面更高效,且无需依赖RSelenium这类浏览器自动化工具。
内容的提问来源于stack exchange,提问作者yuri_passuelo
相关产品推荐
相关产品推荐

