我正在从谷歌趋势下载数据。有时连接会中断,我必须从头重新开始循环(1-726)。假设还是在第721次尝试时出错,我必须再次从1重新启动它。
library(jsonlite)
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms="
for(i in 1:726){
mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE)
message("Retrieving query ", i)
pages[[i]] <- mydata$lines
}错误如下所示
Retrieving query 1
Retrieving query 2
Retrieving query 3
Error in open.connection(con, "rb") : HTTP error 503.然后,我必须重复重新启动整个过程以获得所需的数据。有没有一种方法可以在不丢失进度的情况下重试自己?
发布于 2017-05-22 15:36:27
This answer on SO描述了在出现错误/异常的情况下重试迭代的有用片段。您的代码(不可能重现BTW,因为您没有为file.list赋值任何内容)将如下所示:
library(jsonlite)
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms="
for(i in 1:726){
mydata<-NULL
attempt <- 1
while( is.null(mydata) && attempt <= 3 ) {
attempt <- attempt + 1
try(
mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE)
)
}
message("Retrieving query ", i)
pages[[i]] <- mydata$lines
}您可以随意更改while条件下的尝试次数。此外,原因可能是每秒请求数的限制-正如digEmAll建议的那样,尝试添加Sys.sleep()。
https://stackoverflow.com/questions/44106060
复制相似问题