R 下载,文件冻结

R download,file freeze

我正在尝试从网站下载一些图片。我有一系列 urls 的图像需要下载。所以我 运行 它用这个代码 :

 dlphoto <- function(x){
   print(x)
   setTimeLimit(5)
   Sys.sleep(0.3)
   download.file(x , destfile = basename(x))
   }

这个函数有一个主要问题: 当我 运行 我的 15000 urls 向量时,它会冻结整个 R 会话,并停止对任何事情做出反应。但是,如果我 运行 urls 分开,它工作正常。或者当我 运行 例如 1:50 urls 时,它也有效。但是,例如,当我输入 1:100 时,它也会冻结...所以你能帮我解决这个问题吗?

起初我是用这条线来调用:

 dlphoto(allimage[,2])

然后我改成了这个:

 dlphoto(allimage[c(1:50),2])
 dlphoto(allimage[c(51:100),2])
 dlphoto(allimage[c(101:150),2])
 dlphoto(allimage[c(151:200),2])
 and so on untill 15000

等等。但它仍然冻结了很多。每次它死亡时,我都必须关闭 R 并搜索进程到达的位置并从那里开始。我经常收到这条警告信息:

   Error in download.file(x, destfile = basename(x)) : 
   reached CPU time limit

还有,你能帮我把下载的照片保存在

    /Users/name/Desktop/M2/Mémoire M2/Scrapingtest/photos

非常感谢!!

有几个可能的改进。我假设 OP 正在使用 base 包中的 download.file 如果 method 未设置 libcurl 和 [=18= 则一次尝试仅支持单个文件].

因此,修复应该是在 download.file 函数中使用 method = "libcurl"quiet = TRUE。改变的功能:

dlphoto <- function(x){
    print(x)
    download.file(x , destfile = basename(x), method="libcurl", quiet = TRUE)
}

download.file(x , destfile = basename(x), method="libcurl", quiet = TRUE)

注意:以上两种情况,都不会显示进度条。

我认为 optionstimeout 的价值足以确保 download.file 的 return 以防出现延误。

应检查 download.file 中 return 值的错误。任何 non-zero return 值表示失败。

如果您想查看进度条(一次处理 1500 个文件可能不需要),则应修改函数以一次处理 1 个文件。修改后的函数为:

# This function will display progressbar for each file
dlphoto <- function(x){
  for(file in x){
    print(fine)
    download.file(file , destfile = basename(file))
  }
}