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)
注意:以上两种情况,都不会显示进度条。
我认为 options
的 timeout
的价值足以确保 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))
}
}
我正在尝试从网站下载一些图片。我有一系列 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)
注意:以上两种情况,都不会显示进度条。
我认为 options
的 timeout
的价值足以确保 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))
}
}