R 中的 Repeat() 函数在 503 时重试 url
Repeat() function in R to retry url when 503
我在爬一个很不稳定的网站,有时会崩溃成503,只有刷新才能修复。所以我创建了这些代码来让我的爬虫重试 503 页面,直到内容被传递给一个变量:
repeat{
info = NA
info = read_html(url2)
if(is.na(info) == F) {
break
}
}
info
但由于某种原因,这不起作用。系统仍然给我这个,它不应该:
Error in open.connection(x, "rb") : HTTP error 503.
> info
[1] NA
有时它甚至给我这个,但在这种情况下,内容可以毫无问题地传递给变量信息:
Warning messages:
1: In for (i in seq_along(cenv$extra)) { :
closing unused connection 6 (url)
2: In for (i in seq_along(cenv$extra)) { :
closing unused connection 5 (url)
如何构建代码来重试 503 页面?
您需要捕获错误,这应该有效:
counter = 0
repeat {
counter = counter + 1
info = tryCatch(
read_html(url2),
# if you want to capture warnings as well
warning = function(w) {
Sys.sleep(30)
NA
},
error = function(e) {
Sys.sleep(30)
NA
}
)
if(!is.na(info) | counter >= 10) {
break
}
}
这也是purrr::insistently
的要点。
我在爬一个很不稳定的网站,有时会崩溃成503,只有刷新才能修复。所以我创建了这些代码来让我的爬虫重试 503 页面,直到内容被传递给一个变量:
repeat{
info = NA
info = read_html(url2)
if(is.na(info) == F) {
break
}
}
info
但由于某种原因,这不起作用。系统仍然给我这个,它不应该:
Error in open.connection(x, "rb") : HTTP error 503.
> info
[1] NA
有时它甚至给我这个,但在这种情况下,内容可以毫无问题地传递给变量信息:
Warning messages:
1: In for (i in seq_along(cenv$extra)) { :
closing unused connection 6 (url)
2: In for (i in seq_along(cenv$extra)) { :
closing unused connection 5 (url)
如何构建代码来重试 503 页面?
您需要捕获错误,这应该有效:
counter = 0
repeat {
counter = counter + 1
info = tryCatch(
read_html(url2),
# if you want to capture warnings as well
warning = function(w) {
Sys.sleep(30)
NA
},
error = function(e) {
Sys.sleep(30)
NA
}
)
if(!is.na(info) | counter >= 10) {
break
}
}
这也是purrr::insistently
的要点。