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的要点。