R: Rvest Webscraping 4Chan 目录

问题描述

我正在尝试使用 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