2016-11-29 26 views
5

staram się po prostu replikować przykładzie rvest::html_nodes() jeszcze napotkać błąd:R rvest: nie mógł znaleźć funkcję „xpath_element”

library(rvest) 
ateam <- read_html("http://www.boxofficemojo.com/movies/?id=ateam.htm") 
html_nodes(ateam, "center") 

Error in do.call(method, list(parsed_selector)) : could not find function "xpath_element"

To samo dzieje się, jeśli załadować pakiety, takie jak httr, xml2, selectr. Wydaje mi się, że mam też najnowszą wersję tych pakietów ...

W jakich pakietach znajdują się funkcje takie jak xpath_element, xpath_combinedselector? Jak mogę go uruchomić? Zauważ, że mam uruchomiony system Ubuntu 16.04, więc kod może działać na innych platformach ...

+0

Może R prostu wie, że naruszono warunki danej witryny służby i nie chce pomóc tylko (co byłoby dobrym sposobem działania dla każdego, kto myśli o pomoc umożliwić kradzież zawartości). – hrbrmstr

+0

Twój kod działa dla mnie. Czy zaktualizowałeś R i pakiety? – cory

+0

Dzięki za sprawdzenie @cory! W jakiej wersji platformy/R jesteś? – Matifou

Odpowiedz

1

Jak wskazano w @tbrugz, problem wydaje się pochodzić z pakietu selectr.

Zdarza się to jednak tylko wtedy, gdy pakiet jest zainstalowany z apt-get install r-cran-selectr. Instalowanie pakietu za pomocą sudo R, a następnie install.packages działa dobrze.

pkg <- installed.packages() 
subset(as.data.frame(pkg), Package=="selectr", c("Package", "LibPath")) 
     Package           LibPath 
    selectr selectr /home/matifou/R/x86_64-pc-linux-gnu-library/3.3 
    selectr.1 selectr       /usr/lib/R/site-library 
library(selectr, lib.loc="/home/matifou/R/x86_64-pc-linux-gnu-library/3.3") 
css_to_xpath(".testclass") 
    [1] "descendant-or-self::*[@class and contains(concat(' ', normalize- space(@class), ' '), ' testclass ')]" 

detach("package:selectr", unload=TRUE) 

library(selectr, lib.loc="/usr/lib/R/site-library") 
css_to_xpath(".testclass") 
    Error in do.call(method, list(parsed_selector)) : 

nie mógł znaleźć funkcję „xpath_class”

2

Rozumiem ten problem jest dość stary, ale chciałem skomentować dla tych, którzy mogą mieć podobne problemy.

Natknąłem się na this same error i nie mogłem znaleźć dużej pomocy. Więc zamiast myśleć o CSS, myślałem, że zamiast tego spróbowałbym skierować na ścieżkę xpath. Nie wiem, jaka jest najlepsza praktyka.

Moje oryginalne funkcje działały poprawnie na Ubuntu 16, R 3.4.0. Jednak nie udało im się w Debianie 8 R 3.3.3 i R 3.4.0.

Kiedy zmodyfikowałem swój kod, aby kierować xpaths zamiast css, zaczęły działać zgodnie z oczekiwaniami. Na przykład, zmiana ta ...

contents <- link %>% 
    xml2::read_html() %>% 
    rvest::html_nodes(css = "pre") %>% 
    rvest::html_text() 

do tego ...

contents <- link %>% 
    xml2::read_html() %>% 
    rvest::html_nodes(xpath = "//pre") %>% 
    rvest::html_text() 

rozwiązać mój problem.

0

Rozwiązałem to, aktualizując xml2 bezpośrednio do mojej lokalnej biblioteki R, zamiast polegać na importach rvests.

install.packages("xml2")