在R中下载具有可变长度的嵌套URL

时间:2016-12-16 13:40:47

标签: r url web-scraping concatenation

这里有新成员。试图从R中的网站下载大量文件(但也可以打开建议,例如wget。)

this post开始,我知道我必须创建一个包含所需网址的向量。我最初的问题是写这个载体,因为我在每个州有27个州和34个机构。我必须为所有州的每个机构下载一个文件。虽然州代码总是两个字符,但代理商代码长度为2到7个字符。网址如下所示:

http://website.gov/xx_yyyyyyy.zip

其中xx是州代码,yyyyyyy是代理商代码,长度在2到7个字符之间。关于如何构建一个这样的循环,我很遗憾。

我假设我可以使用以下函数下载此URL列表:

for(i in 1:length(url)){
download.file(urls, destinations, mode="wb")}

这有意义吗?

(免责声明:此帖子的早期版本已提前上传但不完整。我的错误,抱歉!)

3 个答案:

答案 0 :(得分:6)

如果您安装R时\选项可用,则会批量下载并利用download.file()的更快速的同步下载功能:

libcurl

答案 1 :(得分:1)

这应该做的工作:

agency <- c("FAA", "DEA", "NTSB")
states <- c("AL", "AK", "AZ", "AR")

URLs <-
paste0("http://website.gov/",
       rep(agency, length(agency)),
       "_",
       rep(states, length(states)),
       ".zip")

然后遍历URLs向量以拉取zip文件。如果使用apply函数会更快。

答案 2 :(得分:0)

如果您在每个州代码中的所有代理机构代码都相同,则可以使用以下内容创建您要遍历的网址向量。 (您还需要一个相同大小的目的地矢量)。

#Getting all combinations
States <- c("AA","BB")
Agency <- c("ABCDEFG","HIJKLMN")
AllCombinations <- expand.grid(States, Agency)
AllCombinationsVec <- paste0("http://website.gov/" ,AllCombinations$Var1, "_",AllCombinations$Var2,".zip" )

然后,您可以尝试循环遍历每个文件:

#loop method

for(i in seq(AllCombinationsVec)){
  download.file(AllCombinationsVec[i], destinations[i], mode="wb")}

这也是循环项目的另一种方式应用函数将函数应用于列表或向量中的每个项目。

#lapply method

mapply(function(x, y) download.file(x,y, mode="wb"),x = AllCombinationsVec, y = destinations)