我正试着从一个网站下载一些图片。我有一系列的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非常感谢!!
发布于 2018-01-27 23:14:26
有几个改进的可能。我假设OP使用的是来自base的download.file包,如果method没有设置libcurl和quiet = T,那么在一次尝试中只支持单个文件。
因此,修复方法应该是在method = "libcurl"函数中使用quiet = TRUE和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)注意:在上述两种情况下,都不会显示进度条.
我认为来自options的options的价值足以确保在出现延迟的情况下从download.file返回。
应该检查download.file返回值的错误。任何non-zero返回值都表示失败。
如果您希望看到进度条(一次可能不需要1500个文件),那么函数应该修改为一次处理一个文件。修改后的职能如下:
# This function will display progressbar for each file
dlphoto <- function(x){
for(file in x){
print(fine)
download.file(file , destfile = basename(file))
}
}https://stackoverflow.com/questions/48474836
复制相似问题