使用 R 从 url 下载多个文件

Download multiple files from a url, using R

我有这个 url:https://www.cnpm.embrapa.br/projetos/relevobr/download/index.htm 包含巴西各州的地理信息。如果你在任何状态下点击,你会发现这些网格:

现在,如果您点击任何一个网格,您将能够下载该特定网格的地理信息:

我需要的是:一次下载所有网格。可能吗?

您可以抓取页面以获取 zip 文件的 URL,然后遍历 URL 以下载所有内容:

library(rvest)

# get page source
h <- read_html('https://www.cnpm.embrapa.br/projetos/relevobr/download/mg/mg.htm')

urls <- h %>% 
    html_nodes('area') %>%    # get all `area` nodes
    html_attr('href') %>%    # get the link attribute of each node
    sub('.htm$', '.zip', .) %>%    # change file suffix
    paste0('https://www.cnpm.embrapa.br/projetos/relevobr/download/mg/', .)    # append to base URL

# create a directory for it all
dir <- file.path(tempdir(), 'mg')
dir.create(dir)

# iterate and download
lapply(urls, function(url) download.file(url, file.path(dir, basename(url))))

# check it's there
list.files(dir)
#>  [1] "sd-23-y-a.zip" "sd-23-y-b.zip" "sd-23-y-c.zip" "sd-23-y-d.zip" "sd-23-z-a.zip" "sd-23-z-b.zip"
#>  [7] "sd-23-z-c.zip" "sd-23-z-d.zip" "sd-24-y-c.zip" "sd-24-y-d.zip" "se-22-y-d.zip" "se-22-z-a.zip"
#> [13] "se-22-z-b.zip" "se-22-z-c.zip" "se-22-z-d.zip" "se-23-v-a.zip" "se-23-v-b.zip" "se-23-v-c.zip"
#> [19] "se-23-v-d.zip" "se-23-x-a.zip" "se-23-x-b.zip" "se-23-x-c.zip" "se-23-x-d.zip" "se-23-y-a.zip"
#> [25] "se-23-y-b.zip" "se-23-y-c.zip" "se-23-y-d.zip" "se-23-z-a.zip" "se-23-z-b.zip" "se-23-z-c.zip"
#> [31] "se-23-z-d.zip" "se-24-v-a.zip" "se-24-v-b.zip" "se-24-v-c.zip" "se-24-v-d.zip" "se-24-y-a.zip"
#> [37] "se-24-y-c.zip" "sf-22-v-b.zip" "sf-22-x-a.zip" "sf-22-x-b.zip" "sf-23-v-a.zip" "sf-23-v-b.zip"
#> [43] "sf-23-v-c.zip" "sf-23-v-d.zip" "sf-23-x-a.zip" "sf-23-x-b.zip" "sf-23-x-c.zip" "sf-23-x-d.zip"
#> [49] "sf-23-y-a.zip" "sf-23-y-b.zip" "sf-23-z-a.zip" "sf-23-z-b.zip" "sf-24-v-a.zip"