如果html_nodes循环出错,请尝试填写“”

时间:2018-05-16 04:56:58

标签: r loops web-scraping html-parsing rvest

我正在尝试使用html_nodes使用已保存到名为url的对象中的网址进行文本挖掘来提取数据。我创建了一个循环来读取和抓取每个URL。

library(rvest)
for (i in url) {
  tex <- read_html(i)
  p_text <- tex %>%
    html_nodes("p") %>%
    html_text()
  a <- p_text
}

由于某些网址无效,系统会显示以下消息:

  

open.connection(x,“rb”)出错:无法解析主机:app.lo

我想在循环中引入以下内容:如果url不起作用,则假定文本为空,并让循环继续。这是一个真正的问题,因为循环正在停止,我试图消除一些网址,但我有大约200,000 htmls。

2 个答案:

答案 0 :(得分:2)

这可以通过简单的tryCatch和错误处理来实现。我还介绍了一个列表a,您可以在其中存储输出(目前您将在每个循环中覆盖输出。)

library(rvest)
a <- list()
for (i in 1:length(url)) {
  url_use = url[[i]]
  a[[i]] <- 
    tryCatch({
        read_html(url_use) %>%
            html_nodes("p") %>%
            html_text()
    }, error = function(e) NA)
}

如果这不是您的想法,请告诉我。

答案 1 :(得分:0)

您应该只能切换到html_node而不是html_nodes

如果没有匹配,

html_node将返回NA

没有任何示例网址,我无法测试。

有关更多参考,请参阅这些问答&gt;