Как я могу изменить этот код, чтобы R мог правильно загружать файлы с веб-сайта в коде?

Я пытался загрузить некоторые файлы с веб-сайта, используя веб-скрейпинг в R с помощью этого кода:

url <- ("https://www.camara.leg.br/proposicoesWeb/prop_emendas?idProposicao=2261121&subst=0")

webpage <- read_html(url)

link <- webpage %>% html_nodes('.linkDownloadTeor') %>% html_attr("href") %>% paste('https://www.camara.leg.br/proposicoesWeb/', ., sep = "")

tot_links <- as.numeric(length(link))
vec <- data.frame(seq(1,tot_links)) 
vec <- setNames(vec,"indice")
vec$nome_arquivos <- paste("Emenda_",
                           vec$indice,
                           ".pdf",sep = "")

n=1
while (n<=tot_links) {
  try(download.file(link[n],destfile = vec$nome_arquivos[n],mode = "wb"))
  n=n+1
}

Однако, когда я выполняю приведенный выше код, я получаю следующее сообщение об ошибке:

Ошибка в файле загрузки (ссылка [n], destfile = vec $ nome_arquivos [n], mode = wb): невозможно открыть URL-адрес https://www.camara.leg.br/proposicoesWeb/prop_mostrarintegra?codteor=1948041&filename=EMP + 1 +% 3D% 3E + PL + 4372/2020 'Дополнительно: Предупреждение: В файле download.file (ссылка [n], destfile = vec $ nome_arquivos [n], mode = wb): Ошибка InternetOpenUrl:' '} / âý '

Этот код работал, когда я использовал его на другом веб-сайте, поэтому я не понимаю, почему он не работает здесь.


person Carolina Rangel    schedule 09.12.2020    source источник
comment
Возможно, это связано с http vs https, например см. stackoverflow.com/a/33372798/12957340   -  person jared_mamrot    schedule 09.12.2020


Ответы (2)


Это работает для меня:

mapply(download.file, link, vec$nome_arquivos)
person Ronak Shah    schedule 09.12.2020

В tidyverse мы можем использовать

library(purrr)
map2(link, vec$nome_arquivos, download.file)
person akrun    schedule 09.12.2020