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

如何用rvest下载存储在AWS上的网站PDF文件

解决rvest下载澳大利亚政府网页PDF无法打开的问题

问题说明

尝试从指定页面下载约500份PDF文件时,当前代码获取的链接并非直接的AWS存储PDF链接,下载后的文件无法打开。这些链接是跳转页面地址,需要额外步骤提取实际的PDF下载地址。

解决方案

核心思路是先访问每个跳转链接,从跳转页面中提取实际的PDF文件URL,再进行下载。以下是修改后的可运行代码:

# 加载所需包
library(tidyverse)
library(rvest)
library(polite)

# 初始页面URL
mdba_NB_url <- "https://getinvolved.mdba.gov.au/bp-amendments-submissions/widgets/139364/documents"
session <- bow(mdba_NB_url, force = TRUE)
NB_page <- scrape(session)

# 提取初始跳转链接和名称
download_links <- tibble(
  link_names = NB_page %>% html_nodes("a") %>% html_text(),
  link_urls = NB_page %>% html_nodes("a") %>% html_attr('href')
) %>%
  # 筛选目标PDF链接(匹配"No. 数字"格式的名称)
  filter(str_detect(link_names, "No. [0-9]")) %>%
  # 测试用子集,可注释掉以下载全部
  slice(c(1:10))

# 定义函数:从跳转页面提取实际PDF链接
get_real_pdf_url <- function(link) {
  # 建立会话并抓取跳转页面
  sub_session <- bow(link, force = TRUE)
  sub_page <- scrape(sub_session)
  # 提取实际PDF链接(根据页面结构,定位到指向AWS的PDF地址)
  real_url <- sub_page %>% 
    html_nodes("a.download-document") %>% 
    html_attr("href")
  return(real_url)
}

# 批量获取实际PDF链接
download_links <- download_links %>%
  mutate(real_pdf_url = map_chr(link_urls, get_real_pdf_url))

# 批量下载PDF
mapply(
  function(url, filename) {
    download.file(url, paste0(filename, ".pdf"), mode = "wb")
  },
  download_links$real_pdf_url,
  download_links$link_names
)

关键修改点

  • 新增get_real_pdf_url函数:负责访问每个跳转链接,从页面中提取实际的PDF下载地址(通过定位页面中的下载按钮元素a.download-document)
  • 批量处理所有跳转链接,替换为真实的PDF URL后再执行下载
  • 保留polite包的会话机制,遵守网站爬虫规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:05