2017-12-02 16 views
1

Rvestで一部のWebサイトでセレクタを使用できない理由を理解できません。ノードがhtml_nodesで検出されない

例:

url <- read_html("http://www.cbc.ca/news/politics") 

headlines <- url %>% 
html_nodes(".headline") %>% 
html_text() 

もう一つの例:

library(RSelenium) 

rD <- rsDriver(verbose = FALSE) 
rD 
remDr <- rD$client 

url <- "http://www.cbc.ca/news/politics" 
remDr$navigate(url) 

remDr$getTitle() 
remDr$getCurrentUrl() 

webElem <- remDr$findElement(using = "class", value = 'headline') 

webElem$getElementAttribute("class") 

remDr$close() 
rD$server$stop() 

それは十分に単純である必要があります。構造を見ると、そのタイトルはクラスの見出しの下にあります。上記のクラスのカードコンテンツ、カードコンテンツトップがありますが、CSSセレクタもxpathの組み合わせも動作していないようです。

+0

私はクラスの見出しやクラスのカード内容を見ない – lukeA

+0

私はデベロッパーコンソールでページを見てみると、それはあります。 SelectorGadgetを使用している場合でも、それが識別されるCSSセレクターです。 – Monduiz

答えて

1

CSSセレクタが原因selectrパッケージ(少なくともDebianの上で)いくつかの問題を持つ、詳細はこれを参照するrvestに動作しないことがあります。 https://github.com/sjp/selectr/issues/7

SelectorGadgetとChromeデベロッパーツールを使用して、私は次のXPathを使用しましたウェブページから「見出し」を見つけて特定する。正しいXPathを見つける方法についての詳細情報はここで見つけることができます:(?) https://medium.com/@peterjgensler/functions-with-r-and-rvest-a-laymens-guide-acda42325a77

library('rvest') 
library('magrittr') 
url <- read_html("http://www.cbc.ca/news/politics") 


headlines <- url %>% 
html_nodes(xpath = '//*[contains(concat(" ", @class, " "), concat(" ", "pinnableHeadline", " "))]') %>% 
html_text() 

headlines[1] 
"On Trudeau's 2nd trip to China, time may be ripe to advance free 
trade" 
headlines[2] 
"Liberals want to be global leader on open government, but face complaints at home" 
+0

これは動作しています!私はRvestの問題をオープンします。 – Monduiz

関連する問題