问题描述
我正在尝试使用 4chan 进行政治研究。我对 4chan 目录和以下节点“#threads div.teaser > b”感兴趣。 html_nodes()
工作正常,但是当特定的 <b> TITLE </b>
不存在时没有默认值 - 它只是将它可以找到的内容拉入向量中。
这很重要,因为我需要知道特定的 div.teaser
何时没有标题。我真的被困在这里,请参阅下面的代码:
library(googlesheets)
library(RSelenium)
library(tidyverse)
library(rvest)
library(xml2)
#Get web driver up
rD <- RSelenium::rsDriver(browser="firefox",port= 4837L)
remDr <- rD[["client"]]
remDr$open()
remDr$navigate("https://boards.4channel.org/pol/catalog")
webElem <- remDr$findElement("css","body")
webElem$sendKeystoElement(list(key = "end"))
# fetch the html code
remDr$refresh()
soup <- remDr$getPageSource()
soup <- xml2::read_html(soup[[1]])
#obtain titles (not working)
soup %>%
if_else(is.null(html_nodes("#threads div.teaser > b")),1)
我收到以下错误:
Error: `condition` must be a logical vector,not a `xml_document/xml_node` object.
不过,我认为 is.null() 可以做到这一点。
非常感谢任何帮助。
解决方法
解决方案可能是 TryCatch
函数。
以下可能的解决方案:
library(googlesheets)
library(RSelenium)
library(tidyverse)
library(rvest)
library(xml2)
#Get web driver up
rD <- RSelenium::rsDriver(browser="firefox",port= 4837L)
remDr <- rD[["client"]]
remDr$open()
remDr$navigate("https://boards.4channel.org/pol/catalog")
webElem <- remDr$findElement("css","body")
webElem$sendKeysToElement(list(key = "end"))
# fetch the html code
remDr$refresh()
soup <- remDr$getPageSource()
soup <- xml2::read_html(soup[[1]])
#obtain titles (not working)
x<-soup %>% tryCatch( expr = { html_nodes("#threads div.teaser > b")},error = function(e){1})
print(x)
[1] 1