我有這兩個示例 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"
知道如何解決這個問題嗎?
是否也可以優化此代碼?
uj5u.com熱心網友回復:
我們可以檢查length,如果它是 0 ( length(character(0))is 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"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420121.html
標籤:
下一篇:在for回圈中過濾R中的資料
