网站上的节点未抓取内容

时间:2019-08-14 16:05:27

标签: r web-scraping rvest

我已尝试抓取新闻网站的内容(“标题”,“内容”等),但我使用的节点未返回该内容。

我尝试了不同的节点/标签,但是似乎都不起作用。我也使用了SelectorGadget,但没有任何结果。我曾使用相同的策略来抓取其他网站,但没有任何问题。

以下是尝试获取“内容”的示例

library(rvest)

url_test <- read_html('https://lasillavacia.com/silla-llena/red-de-la-paz/historia/las-disidencias-son-fruto-de-anos-de-division-interna-de-las-farc') 
content_test <- html_text(html_nodes(url_test, ".article-body-mt-5"))

我也尝试使用xpath代替css class,但没有结果。

这里是尝试获取“日期”的示例

content_test <- html_text(html_nodes(url_test, ".article-date"))

例如,即使我尝试从网站页面上抓取所有<h>,我也会得到character(0)

可能是什么问题?感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

由于内容是通过javascript加载到页面上的,因此我使用RSelenium抓取了数据并且可以正常工作

library(RSelenium)

#Setting the remote browser
remDr <- RSelenium::remoteDriver(remoteServerAddr = "192.168.99.100",
                                 port = 4444L,
                                 browserName = "chrome")
remDr$open()

url_test <- 'https://lasillavacia.com/silla-llena/red-de-la-paz/historia/las-disidencias-son-fruto-de-anos-de-division-interna-de-las-farc'

remDr$navigate(url_test)

#Checking if the website page is loaded 
remDr$screenshot(display = TRUE)

#Getting the content
content_test <- remDr$findElements(using = "css selector", value = '.article-date')
content_test <-  sapply(content_test, function(x){x$getElementText()})

> content_test
[[1]]
[1] "22 de Septiembre de 2018"

答案 1 :(得分:1)

两件事。

  1. 您的CSS选择器错误。应该是:

    ".article-body.mt-5"
    
  2. 数据被动态加载并作为json返回。您可以在“网络”选项卡中找到端点。无需使用硒。

    library(jsonlite)
    
    data <- jsonlite::read_json('https://lasillavacia.com/silla_llena_api/get?path=/contenido-nodo/68077&_format=hal_json')
    

body是html,因此您可以使用html解析器。以下是一个简单的文本转储。您将通过选择节点进行优化。

library(rvest)

read_html(data[[1]]$body) %>% html_text()