使用rvest爬取巴西央行网页表格返回空列表求助
解决rvest爬取巴西央行官网表格返回空列表的问题
问题原因
你访问的主页面中,目标表格并非直接嵌入在主HTML结构里,而是通过iframe框架加载外部资源实现的。直接用read_html()请求主页面,只能获取到iframe的占位标签,无法拿到表格的实际数据,因此html_table()返回空列表。
解决方案
方案1:直接请求表格的数据源链接
通过查看页面的iframe元素,可以定位到表格实际所在的数据源URL,直接请求该URL即可提取表格:
library(rvest) # 表格实际数据源链接 target_url <- "https://www.bcb.gov.br/api/relatorio/pt-br/controleinflacao/historicometas?url=/controleinflacao/historicometas" # 提取表格 table_data <- target_url %>% read_html() %>% html_table(fill = TRUE) # 查看提取结果 print(table_data)
fill = TRUE参数用于处理表格单元格结构不规整的情况,确保能完整提取表格内容。
方案2:使用RSelenium处理动态渲染(备用)
如果方案1失效(比如页面后续改为JS动态渲染表格),可以用RSelenium模拟浏览器加载页面,获取完整的渲染后源码:
library(RSelenium) library(rvest) # 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www.bcb.gov.br/controleinflacao/historicometas") # 获取渲染后的页面源码 page_source <- remDr$getPageSource()[[1]] page_html <- read_html(page_source) # 提取表格 table_data <- page_html %>% html_table(fill = TRUE) # 关闭浏览器驱动 remDr$close() driver$server$stop() # 查看结果 print(table_data)
- 注意:使用RSelenium前,需确保本地浏览器版本与驱动版本匹配,否则会出现启动失败的问题。
内容的提问来源于stack exchange,提问作者Pedro Cardoso
相关产品推荐
相关产品推荐

