Обработка ошибки htmlParse (не удалось загрузить ресурс HTTP)

Я пытаюсь веб-царапать страницу. Однако время от времени мой цикл не работает, потому что синтаксический анализатор "не загружает HTTP-ресурс" . Проблема в том, что страница не загружается в моем браузере, так что это не проблема с кодом.

однако, это довольно раздражает, чтобы перезапустить процесс после создания исключения для каждой страницы, которую я нахожу ошибку. Интересно, есть ли способ поставить условие if. Я думаю о чем-то вроде: Если произошла ошибка, то перезапустите петля На следующем шаге.

Я просматриваю страницу справки для htmlParse и обнаружил, что есть аргумент ошибки, но не мог понять, как его использовать. Есть идеи для моего состояния if?

Ниже приведен воспроизводимый пример:

if(require(RCurl) == F) install.packages('RCurl')
if(require(XML) == F) install.packages('XML')
if(require(seqinr) == F) install.packages('seqinr')

for  (i in 575:585){
    currentPage <- i  # define pagina inicial da busca
# Link que ser? procurado

link <- paste("http://www.cnj.jus.br/improbidade_adm/visualizar_condenacao.php?seq_condenacao=",
             currentPage,
             sep='')

doc <- htmlParse(link, encoding = "UTF-8") #this will preserve characters
    tables <- readHTMLTable(doc, stringsAsFactors = FALSE)
    if(length(tables) != 0) {
    tabela2 <- as.data.frame(tables[10])

    tabela2[,1]  <- gsub( "\n", " ", tabela2[,1] )
    tabela2[,2]  <- gsub( "\n", " ", tabela2[,2] )
    tabela2[,2]  <- gsub( "\t", " ", tabela2[,2] )

    listofTabelas[[i]] <- tabela2

  tabela1 <- do.call("rbind", listofTabelas)
  names(tabela1) <- c("Variaveis", "status")

    }
}

1 ответов


возможно, вам лучше использовать httr пакета.

library(httr)
library(XML)

url <- "http://www.cnj.jus.br/improbidade_adm/visualizar_condenacao.php"
for  (i in 575:585){
  response<- GET(url,path="/",query=c(seq_condenacao=as.character(i)))
  if (response$status_code!=200){ # HTTP request failed!!
    # do some stuff...
    print(paste("Failure:",i,"Status:",response$status_code))
    next
  }
  doc <- htmlParse(response, encoding = "UTF-8")
  # do some other stuff
  print(paste("Success:",i,"Status:",response$status_code))
}
# [1] "Success: 575 Status: 200"
# [1] "Success: 576 Status: 200"
# [1] "Success: 577 Status: 200"
# [1] "Success: 578 Status: 200"
# [1] "Success: 579 Status: 200"
# [1] "Success: 580 Status: 200"
# [1] "Success: 581 Status: 200"
# [1] "Success: 582 Status: 200"
# [1] "Success: 583 Status: 200"
# [1] "Success: 584 Status: 200"
# [1] "Success: 585 Status: 200"