没有记录时如何将结果保存为"ND"?西装和R

How to save result as "ND" when there is no record? rvest and R

我有这两个例子html:url1.html ; url2.html

在 URL1.html 中没有信息 (71) 而在 URL2.html 中有。

我在 R 中使用此代码:

library(rvest)
library(tidyverse)

x<-data.frame(
    URL=c(1:2),
    page=c(paste(readLines("url1.html"), collapse="\n"),
                 paste(readLines("url2.html"), collapse="\n"))
) 

for (i in 1:nrow(x)){
    html<-x$page[i]%>% unclass() %>% unlist()
    read_html(html,encoding = "ISO-8859-1") %>% 
        rvest::html_elements(xpath = '//*[@id="principal"]/table[2]') %>% 
        rvest::html_elements(xpath = '//div[@id="tituloContext"]') %>% 
        html_text()%>%  
        str_replace_all(.,"[\n\r\t]+", "")%>%
        stringr::str_trim( ) -> x$title[i]
}

结果:标题

[1] "Â  CARRINHO DE LIXO PARA LIMPEZA URBANA"
character(0)

问题:虽然我从 URL1 中获取了正确的内容,但我想在它不存在时保存“-”值(例如 URL2)

预期输出:不可用(ND)。

[1] "Â  CARRINHO DE LIXO PARA LIMPEZA URBANA"
[1] "ND" 

知道如何解决这个问题吗?

是否也可以优化此代码?

我们可以检查 length 如果它是 0(length(character(0))0),将值更改为 'ND'

for (i in seq_len(nrow(x))){
    html<-x$page[i]%>% 
                 unclass() %>%
                 unlist()
    read_html(html,encoding = "ISO-8859-1") %>% 
        rvest::html_elements(xpath = '//*[@id="principal"]/table[2]') %>% 
        rvest::html_elements(xpath = '//div[@id="tituloContext"]') %>% 
        html_text()%>%  
        str_replace_all(.,"[\n\r\t]+", "")%>%
        stringr::str_trim( ) -> tmp
      if(length(tmp) == 0) tmp <- "ND"
      x$title[i] <- tmp
}

-正在检查

> x$title
[1] "CARRINHO DE LIXO PARA LIMPEZA URBANA" "ND"