在R中刮取一系列URL

时间:2015-05-05 14:52:38

标签: r web-scraping downloading

我正在尝试批量下载一系列网址。到目前为止,我的代码是

link <- paste("http://portal.hud.gov/hudportal/documents/huddoc? id=RAD_PHAApp_", state, ".xls", sep = "")
state <- c('al','tx')
download.file(link, paste(destfile = 'Y:\\PBlack\\RAD\\', state, '.xls', sep = ""), mode = 'wb')

这里的想法是我可以为状态值添加名称,它会下载并将它们命名为状态。

当我运行代码时,R返回以下内容。

Warning messages:
1: In download.file(link, paste(destfile = "Y:\\PBlack\\RAD\\", state,  :
 only first element of 'url' argument used
2: In download.file(link, paste(destfile = "Y:\\PBlack\\RAD\\", state,  :
 only first element of 'destfile' argument used

2 个答案:

答案 0 :(得分:1)

您需要调用该命令多次保存文件。现在它不起作用,因为download.file()函数下载单个文件,而不是文件向量。

如此:

states <- c('al','tx')
links <- paste("http://portal.hud.gov/hudportal/documents/huddoc?id=RAD_PHAApp_", states, ".xls", sep = "")

func.download_files <- function(link,state) {

    download.file(link,paste("~/Desktop/",state,".xls",sep=""),mode='wb')
}

mapply(FUN = func.download_files,link=links,state=states)

答案 1 :(得分:0)

正如TARehman指出的那样,您需要为每个文件单独调用download.file。使用for循环执行此操作可能更直观。

另外,使用paste0将避免使用sep =&#34;&#34;每一次。

states <- c('al', 'tx')

for(state in states) {
  link <- paste0("http://portal.hud.gov/hudportal/documents/huddoc?id=RAD_PHAApp_", state, ".xls")
  download.file(link,paste0("~/Desktop/",state,".xls"),mode='wb')
}

虽然mapply可能会更快一些。