[我正在尝试使用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")
这里有两个问题。首先,指向某些文件的链接未正确设置为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"))