我如何使用R中的rvest从将PDF存储在AWS上的网站下载PDF

0lvr5msh  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(132)

从使用rvest存储在AWS上的网站下载pdf时出现问题

我正在尝试使用rvestthis government webpage下载约500个单独的PDF提交。网站上的许多链接指向存储在单独AWS网站上的PDF文件(for example this document-请参阅“个人提交”部分的链接)。
当我下载PDF时,我无法打开它们。我不认为我实际上是从AWS网站下载链接的PDF文件。这些链接不包括.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")
gstyhher

gstyhher1#

链接确实以某种方式被重定向。但你可以相对容易地修复它。如果你在网络分析下载一个实际的文件时查看它,你只需要在你的url后面加上“/download”。
例如:

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))

相关问题