使用rvest进行网页刮擦不起作用

时间:2017-11-03 17:39:46

标签: r rvest

我正试图从这个网站上删除评论:

http://www.latercera.com/noticia/trabajos-realizan-donde-viven-los-extranjeros-tienen-residencia-chile/

这是我执行此任务的代码。

url <- 'http://www.latercera.com/noticia/trabajos-realizan-donde-viven-los-extranjeros-tienen-residencia-chile/'

webpage <- read_html(url)

data_html <- html_nodes(webpage,"gig-comment-body")

不幸的是,似乎rvest无法通过CSS选择器(gig-comment-body)识别节点。

节点出来是一个空列表,所以它不会刮掉任何东西。

2 个答案:

答案 0 :(得分:2)

@ r2evans是对的。它使用javascript构建评论<div>,并且还需要延迟。我更喜欢Splash to Selenium(因为我做了splashr因此我并不完全公正):

library(rvest)
library(splashr)

URL <- 'http://www.latercera.com/noticia/trabajos-realizan-donde-viven-los-extranjeros-tienen-residencia-chile/'

# Needs Docker => https://www.docker.com/
# Then needs splashr::install_splash()

start_splash()

splash_local %>% 
  splash_response_body(TRUE) %>% 
  splash_go(URL) %>% 
  splash_wait(10) %>% 
  splash_html() -> pg

html_nodes(pg, "div.gig-comment-body")
## {xml_nodeset (10)}
##  [1] <div class="gig-comment-body"><p><span>Algunosdesubicados comentan y se refieren a la UE<span>  </span>como si en alguna forma Chil ...
##  [2] <div class="gig-comment-body">Si buscan información se encontrarán que la unión Europea se está desmorona ndo por asunto de la inmi ...
##  [3] <div class="gig-comment-body">Pocos inmigrantes tiene Chile en función de su población. En España hay 4.5 mill de inmigrantes. 800. ...
##  [4] <div class="gig-comment-body">Chao chilenois idiotas tanto hablan y dicen que hacer cuando ni su pais les pertenece esta gobernado  ...
##  [5] <div class="gig-comment-body">\n<div> Victor Hugo Ramirez Lillo, de Conchalí, exiliado en Goiania, Brasil, pecha bono de exonerado, ...
##  [6] <div class="gig-comment-body">Les escribo desde mi 2do pais, USA.  Mi PDTE. TRUMP  se bajó del  TPP y Chile se va a la cresta. La o ...
##  [7] <div class="gig-comment-body">En CHILE siempre fuimos muy cuidadosos con le emigración, solo lo MEJOR de Alemania, Francia, Suecia, ...
##  [8] <div class="gig-comment-body"><span>Basta de inmigración!!! Santiago está lleno de vendedores ambulantes extranieros!!!¿¿esos son l ...
##  [9] <div class="gig-comment-body">IGNOREN A JON LESCANO, ESE ES UN CHOLO QUE FUE DEPORTADO DE CHILE.<div>IGNOREN A  LOS EXTRANJEROS MET ...
## [10] <div class="gig-comment-body">Me pregunto qué dirá el nacionalista promedio cuando agarre un libro de historia y se dé cuenta de qu ...

killall_splash()

答案 1 :(得分:2)

这是rselenium没有docker的另一个解决方案

install.packages("RSelenium")

library (RSelenium)


driver<- rsDriver()
remDr <- driver[["client"]]

remDr$navigate("http://www.latercera.com/noticia/trabajos-realizan-donde-viven-los-extranjeros-tienen-residencia-chile/")

elem <- remDr$findElement( using = "id",value = "commentsDiv-779453")
#or
elem <- remDr$findElement( using = "class name", "gig-comments-comments")

elem$highlightElement() # just for interactive use in browser.

elemtxt <- elem$getElementAttribute("outerHTML") # gets us the HTML