我有一段代码:
raw_prefix <- file.path("data", "raw")
fpa_prefix <- file.path(raw_prefix, "fpa-fod")
if(!dir.exists(fpa_prefix)){
dir.create(fpa_prefix)
}
fpa_gdb <- file.path(fpa_prefix, "RDS-2013-0009.4_GDB", "Data", "FPA_FOD_20170508.gdb")
if (!file.exists(fpa_gdb)) {
loc <- "https://www.fs.usda.gov/rds/fedora/objects/RDS:RDS-2013-0009.4/datastreams/RDS-2013-0009.4_GDB/content"
dest <- paste0(fpa_prefix, ".zip")
download.file(loc, dest)
unzip(dest, exdir = fpa_prefix)
unlink(dest)
assert_that(file.exists(fpa_gdb))
}它非常适合大多数网站以可复制工作流的名义动态下载文件,但我需要一个数据集,它有一个"href“和”目标“文件,因此很难使用download.file()下载。
该文件(也在上面的代码中)如下所示:
https://www.fs.usda.gov/rds/archive/Product/RDS-2013-0009.4/
指向页面底部的是一个名为
RDS-2013年-0009.4_GDB.zip
这就是我正试图使用上面的脚本下载的文件。
如果您检查这个元素,您会发现这个结构,它返回正确的文件!但是如何转换成R码呢?
<a href="//www.fs.usda.gov/rds/fedora/objects/RDS:RDS-2013-0009.4/datastreams/RDS-2013-0009.4_GDB/content" target="_blank">RDS-2013-0009.4_GDB.zip</a>
如果有人知道如何下载这个文件,我会非常感激的!
谢谢!
发布于 2017-09-03 23:35:11
这将:
请注意,write_disk()不会覆盖现有文件,因此如果下载被中断,可以删除该文件或使用overwrite=TRUE。
library(rvest)
library(httr)
library(purrr)
pg <- read_html("https://www.fs.usda.gov/rds/archive/Product/RDS-2013-0009.4/")
fils <- html_nodes(pg, xpath=".//dd[@class='product']//li/a[contains(., 'zip')]")
walk2(html_attr(fils, 'href'), html_text(fils),
~GET(sprintf("https:%s", .x), write_disk(.y), progress()))如果您不想使用purrr,这都是基本R:
invisible(
mapply(
download.file,
url = sprintf("https:%s", html_attr(fils, 'href')),
destfile = html_text(fils)
)
)https://stackoverflow.com/questions/46028370
复制相似问题