Я пытаюсь загрузить ~ 500 отдельных материалов в формате PDF с этой правительственной веб-страницы , используя rvest. Многие ссылки на сайте указывают на PDF-файлы, хранящиеся на отдельном сайте AWS (, например, этот документ — см. ссылки в разделе «Отдельные отправки» и далее).
Когда я загружаю PDF-файлы, я не могу их открыть. Я не думаю, что на самом деле загружаю связанные PDF-файлы с сайта AWS. Ссылки не включают тип файла .pdf (например, https://getinvolved.mdba.gov.au/22346/widgets/139364/documents/47013), и я думаю, что пропустил шаг для загрузки фактические PDF-файлы.
#load packages
library(tidyverse)
library(rvest)
library(polite)
# scrape PDF links and names
mdba_NB_url <- "https://getinvolved.mdba.gov.au/bp-amendments-submissions/widgets/139364/documents"
session <- bow(mdba_NB_url, force = TRUE) # from the polite package, identify and respect any explicit limits
NB_page <- scrape(session) # scrape the page contents
download_links <- tibble(link_names = NB_page %>% #download links
html_nodes("a")%>%
html_text(),
link_urls = NB_page %>%
html_nodes("a") %>%
html_attr('href'))
#filter PDFs
download_links_docs <- download_links %>%. #limit links to PDFs I need
filter(str_detect(link_names, "No. [0-9]"))
download_links_docs_subset <- download_links_docs %>%. #subset for test download
slice(c(1:10))
# Download PDFs
my_urls <- download_links_docs_subset$link_urls
save_here <- paste0(download_links_docs_subset$link_names, ".pdf")
mapply(download.file, my_urls, save_here, mode = "wb")





Ссылка действительно каким-то образом перенаправляется. Но вы можете относительно легко это исправить. Если вы посмотрите на сетевой анализ, когда он загружает фактический файл, вам просто нужно добавить «/download» к вашему URL-адресу.
например так:
my_urls <- paste0(download_links_docs_subset$link_urls,"/download")
Затем вы можете загрузить их, используя httr. download.file, кажется, путается с кодировкой PDF.
Вот так:
httr::GET(my_urls[1],
httr::write_disk("test.pdf", overwrite = T))
Спасибо @Datapumpernickel. Это решило мою проблему. Я завернул его в функцию и использовал pmap, и у меня есть свои файлы. ``` download_pdf <- function(link_urls, link_names) { httr::GET(link_urls, httr::write_disk(link_names, overwrite = TRUE)) } # Применить функцию к каждой строке фрейма данных pmap(download_links_docs, download_pdf) ```
Да, вы правы, некоторые из них перенаправляют на другой правительственный сайт. Ссылки, которые меня интересуют, начинаются с раздела «Индивидуальные материалы», и все они ссылаются на AWS. Я отфильтровал ссылки, к которым я хочу получить доступ, в приведенном выше коде.