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

R语言如何从带下载按钮的PDF可视化预览页批量下载PDF

问题根因

原代码直接调用download.file请求预览页URL只能拿到空文件,核心原因是目标站点的预览页是动态渲染的HTML页面,并非直接返回PDF二进制流:页面加载完成后才会通过前端逻辑异步拉取PDF资源,同时站点做了防盗链校验,直接请求资源不带合法请求头会被拦截。你之前在其他站点能用原代码,是因为那些站点的URL直接指向PDF文件本身,不需要额外处理。

推荐方案(无需浏览器驱动,效率最高)

这个站点的PDF下载接口有固定规则,不需要解析页面、模拟点击按钮,直接构造带合法请求头的HTTP请求就能拿到完整PDF文件,步骤如下:

  1. 从预览页URL中提取末尾的刊物数字ID
  2. 拼接对应ID的官方PDF下载接口地址
  3. 请求时携带预览页作为Referer、加上常规浏览器UA绕过防盗链校验
  4. 将接口返回的二进制流直接写入本地PDF文件

完整可运行代码:

# 首次运行先执行安装依赖:install.packages("httr2")
library(httr2)

# 原有URL与本地文件名的映射配置
urls <- c("https://dom-web.pbh.gov.br/visualizacao/edicao/2714",
          "https://dom-web.pbh.gov.br/visualizacao/edicao/2714",
          "https://dom-web.pbh.gov.br/visualizacao/edicao/2716",
          "https://dom-web.pbh.gov.br/visualizacao/edicao/2718",
          "https://dom-web.pbh.gov.br/visualizacao/edicao/2720",
          "https://dom-web.pbh.gov.br/visualizacao/edicao/2721")
file_names = c("DECRETO Nº 17.297.pdf",
               "DECRETO Nº 17.298.pdf",
               "DECRETO Nº 17.304.pdf",
               "DECRETO Nº 17.308.pdf",
               "DECRETO Nº 17.309.pdf",
               "DECRETO Nº 17.313.pdf")

# 批量下载执行
for (i in seq_along(urls)) {
  # 提取URL末尾的刊物ID
  edicao_id <- sub(".*/(\\d+)$", "\\1", urls[i])
  # 拼接真实PDF下载地址
  pdf_url <- paste0("https://dom-web.pbh.gov.br/edicao/download/", edicao_id)
  
  # 构造带合法请求头的请求,绕过防盗链
  resp <- request(pdf_url) |>
    req_headers(
      Referer = urls[i],
      `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    ) |>
    req_perform()
  
  # 将二进制内容写入本地文件
  writeBin(resp_body_raw(resp), file_names[i])
  # 设置请求间隔,避免触发站点反爬
  Sys.sleep(1)
}
注意事项
  • 你当前配置的前两个预览URL对应的刊物ID都是2714,下载得到的会是同一份PDF,如果对应两个不同文件,请核对修正URL配置。
  • 如果运行时出现403权限错误,将Sys.sleep(1)的间隔调整为2-3秒即可。
  • 如果后续站点改版修改了下载接口规则,再考虑用RSelenium方案:启动驱动时提前配置Chrome的下载偏好,关闭下载弹窗、指定本地保存路径,页面加载完成后定位下载按钮触发点击即可,不需要额外解析资源地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:48:18