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

使用R从HTML节点下载动态文件的路径获取问题

解决R语言rvest/xml2获取政府公报下载链接异常的问题

这种href以0结尾的情况,大多是因为页面的下载链接是JavaScript动态生成的——Chrome审查元素看到的是JS执行后的最终链接,但rvest和xml2默认只抓取原始静态HTML,所以拿到的是未被JS处理的初始占位值(比如0)。下面是几种可行的解决方法:

方法1:从页面元素提取ID拼接链接

很多政府网站的下载链接核心是唯一文档ID(比如你例子里的7620),这个ID通常会藏在页面的其他属性里,比如按钮的data-*属性、列表项的ID标签里:

library(rvest)
# 替换成目标页面的URL
target_url <- "https://ioes.dio.es.gov.br/portal/edicoes"
page <- read_html(target_url)

# 假设ID在带data-id属性的下载按钮中,根据实际页面调整选择器
doc_id <- page %>% 
  html_element("[data-id]") %>%  # 替换成实际的元素选择器
  html_attr("data-id")

# 拼接正确的下载链接
download_link <- paste0("https://ioes.dio.es.gov.br/portal/edicoes/download/", doc_id)

方法2:用RSelenium模拟浏览器加载动态内容

如果ID无法从静态HTML中提取,就需要模拟浏览器让JS执行完成后再抓取:

library(RSelenium)
library(rvest)

# 启动Chrome会话(需提前安装ChromeDriver并配置环境变量)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标页面
remDr$navigate(target_url)

# 获取JS执行后的完整页面源码
page_source <- remDr$getPageSource()[[1]]
page <- read_html(page_source)

# 直接抓取正确的下载链接(替换成实际的链接选择器)
download_link <- page %>% 
  html_element("a[href*='download']") %>% 
  html_attr("href")

# 关闭浏览器会话
remDr$close()
driver$server$stop()

方法3:直接调用下载接口

打开Chrome开发者工具的「网络」面板,点击下载按钮,找到触发的真实请求URL,直接用httr或download.file下载:

library(httr)
# 替换成实际的下载ID
download_url <- "https://ioes.dio.es.gov.br/portal/edicoes/download/7620"
# 发送请求并保存文件
response <- GET(download_url)
writeBin(content(response, "raw"), paste0("政府公报_", Sys.Date(), ".pdf"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:00:53