R Scraping - пропустить HTML-ошибку 500 в цикле

Я скребу со стола.

dput(head(temp_data))
structure(list(link = c("http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998342636", 
"http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998342636", 
"http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998378860", 
"http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998346429", 
"http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998346429", 
"http://ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4030998346429"
)), .Names = "link", row.names = c(NA, 6L), class = "data.frame")

Мой код:

new_function <- function() {


for (i in 1:nrow(temp_data)) {

  temp_data_point <- temp_data[i, ]
  file <- read_html(temp_data_point)
  tables <- html_nodes(file, "table")
  table1 <- html_table(tables[8], fill = TRUE)
  table2 <- as.data.frame(table1)
  table2 <- table2[15:24 , 1:2]


  colnames(table2)[1] <- "variables"
  colnames(table2)[2] <- "results"


  table2[1, 1] <- "name"
  table2[2, 1] <- "legal_form"
  table2[3, 1] <- "industry"
  table2[4, 1] <- "tax_num"
  table2[5, 1] <- "id"
  table2[6, 1] <- "account_num"
  table2[7, 1] <- "bank_name"
  table2[8, 1] <- "address"
  table2[9, 1] <- "location"
  table2[10, 1] <- "phone"

  test2 <- spread(table2, variables, results)
  temp_table3[i, ] <- test2

}

return(temp_table3)

}

Проблема возникает, когда один из URL-адресов не содержит таблицы. Например:

По нерабочей ссылке получаю:

Ошибка в open.connection(x, "rb"): ошибка HTML 500

Любые идеи, как я могу реализовать оператор if, который проверяет, содержит ли ссылка таблицу, и если нет, переходит к следующей итерации? Возможно, TryCatch?


person Prometheus    schedule 17.08.2017    source источник


Ответы (1)


Допустим, у вас есть пустая ссылка на таблицу. Сначала проверьте код состояния запроса.

library(httr)
r = GET("http://www.ujp.gov.mk/mk/prebaruvanje_pravni_lica/prikazi?edb=MK4019999105375")
status = status_code(r)

Затем используйте условный оператор. Если код состояния не равен 500, продолжайте анализировать таблицу. В противном случае перейти к следующей итерации.

if(status != 500){
  # parse table
}
else{
  next # jump to next iteration
}
person Aleksandr    schedule 17.08.2017