如何从Web下载带有R的pdf文件(编码问题)

问题描述 投票:0回答:1

[我正在尝试使用R从网站下载pdf文件。当我尝试使用功能browserURL时,它仅与参数encodeIfNeeded = T一起使用。因此,如果我将相同的URL传递给函数download, .file,它返回“无法打开destfile'downloaded / teste.pdf',原因是'没有这样的文件或目录”,即找不到正确的URL。

如何纠正编码,以便我能够以编程方式下载文件?我需要自动执行此操作,因为有上千个文件可供下载。

这是最小的可复制代码:

library(tidyverse)
library(rvest)


url <- "http://www.ouvidoriageral.sp.gov.br/decisoesLAI.html"
webpage <- read_html(url)

# scrapping hyperlinks
links_decisoes <- html_nodes(webpage,".borderTD a") %>%
  html_attr("href")

# creating full/correct url
full_links <- paste("http://www.ouvidoriageral.sp.gov.br/", links_decisoes, sep="" )

# browseURL only works with encodeIfNeeded = T
browseURL(full_links[1], encodeIfNeeded = T,
          browser = "C://Program Files//Mozilla Firefox//firefox.exe")
# returns an error
download.file(full_links[1], "downloaded/teste.pdf") 
r encode
1个回答
0
投票

这里有两个问题。首先,指向某些文件的链接未正确设置为url格式-它们包含空格和其他特殊字符。为了转换它们,您必须使用url_escape()。其次,您要保存的路径是相对于R主目录的,但是您没有告诉R。您或者需要这样的完整路径:"C://Users/Manoel/Documents/downloaded/testes.pdf",或者是这样的相对路径:path.expand("~/downloaded/testes.pdf")

此代码应满足您的要求:

library(tidyverse)
library(rvest)

# scraping hyperlinks
full_links <- "http://www.ouvidoriageral.sp.gov.br/decisoesLAI.html" %>%
               read_html()                                           %>%
               html_nodes(".borderTD a")                             %>%
               html_attr("href")                                     %>%
               url_escape()                                          %>%
               {paste0("http://www.ouvidoriageral.sp.gov.br/", .)}

# Looks at page in firefox
browseURL(full_links[1], encodeIfNeeded = T, browser = "firefox.exe")

# Saves pdf to "downloaded" folder if it exists
download.file(full_links[1], path.expand("~/downloaded/teste.pdf"))
© www.soinside.com 2019 - 2024. All rights reserved.