2017-08-17 60 views
0

我正在刮一张桌子。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) 

} 

的问题出现时,网址的一个不包含表。例如:

与非工作的链接,我得到:在open.connection

错误(X,“RB “):HTML错误500

任何想法如何我可以实现一个if语句,检查链接是否包含表,如果没有,跳到下一次迭代?也许是TryCatch?

回答

2

可以说你有空表链接。首先检查请求状态码。

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 
}