Как я могу загрузить PDF-файлы с веб-сайта, который хранит их на AWS, используя rvest в R

Проблема с загрузкой PDF-файлов с веб-сайта, который хранит их на AWS, с помощью rvest

Я пытаюсь загрузить ~ 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")

Да, вы правы, некоторые из них перенаправляют на другой правительственный сайт. Ссылки, которые меня интересуют, начинаются с раздела «Индивидуальные материалы», и все они ссылаются на AWS. Я отфильтровал ссылки, к которым я хочу получить доступ, в приведенном выше коде.

pparamo 05.06.2023 07:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ссылка действительно каким-то образом перенаправляется. Но вы можете относительно легко это исправить. Если вы посмотрите на сетевой анализ, когда он загружает фактический файл, вам просто нужно добавить «/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) ```

pparamo 10.06.2023 10:24

Другие вопросы по теме