Rvest如何避免open.connection(x,“ rb”)中的错误:HTTP错误404 R

时间:2019-05-25 08:48:40

标签: r rvest

我想从网站列表中获取一些信息。 我有一个网址列表,但是有些网址不起作用/不存在。

错误是:

  

open.connection(x,“ rb”)中的错误:HTTP错误404 R

library(Rvest)
url_web<-(c("https://it.wikipedia.org/wiki/Roma",
        "https://it.wikipedia.org/wiki/Milano",
        "https://it.wikipedia.org/wiki/Napoli",
        "https://it.wikipedia.org/wiki/Torinoooo", # for example this is an error
        "https://it.wikipedia.org/wiki/Palermo",
        "https://it.wikipedia.org/wiki/Venezia"))

我为目标编写了这段代码。

我尝试使用try,但不起作用。

我尝试在ifelse(url.exists(url_web)==TRUE,Cont<-read_html(url_web), NA )中使用for,但不起作用。

for (i in 1:length(url_web)){
      Cont<-read_html(i)
      Dist_1<-html_nodes(Cont, ".firstHeading") %>% 
      html_text()
      print(Dist_1)
    }

问题是:如何在无法链接或写错地方跳转URL?

先谢谢您。

弗朗切斯科

1 个答案:

答案 0 :(得分:1)

一个简单的try应该可以解决问题

parsed_pages <- replicate(list(), n = length(url_web))
for (k in seq_along(url_web)) parsed_pages[[k]] <- try(xml2::read_html(url_web[k]), silent = TRUE)

silent = TRUE参数意味着将忽略任何错误。默认情况下,使silent = FALSE报告错误的try。请注意,即使silent = FALSE的代码有效(报告的错误也可能使它看起来像没有那样)。

在这里我们可以测试上面的代码

for (k in seq_along(url_web)) print(class(parsed_pages[[k]]))
# [1] "xml_document" "xml_node"    
# [1] "xml_document" "xml_node"    
# [1] "xml_document" "xml_node"    
# [1] "try-error"
# [1] "xml_document" "xml_node"    
# [1] "xml_document" "xml_node"