Функция повтора () в R, чтобы повторить URL, когда 503 - PullRequest
0 голосов
/ 27 марта 2020

Я сканировал довольно нестабильный веб-сайт, который иногда падает до 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

Иногда это даже дает мне это, но при таких условиях содержимое может быть передано в переменную info без проблем:

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 страниц?

1 Ответ

2 голосов
/ 27 марта 2020

Вам нужно зафиксировать ошибку, это должно сработать:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...