2016-11-29 12 views
5

я пытаюсь просто повторить пример из rvest::html_nodes(), но возникает ошибка:R rvest: не удалось найти функцию «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"

То же самое происходит, если я загружаю пакеты, такие как httr, xml2, selectr. Кажется, у меня есть последняя версия этих пакетов ...

В каких пакетах есть такие функции, как xpath_element, xpath_combinedselector? Как мне заставить его работать? Обратите внимание, что я работаю на Ubuntu 16.04, так что код может работать на других платформах ...

+0

Возможно R просто знает, что вы нарушаете условие использования сайта службы и отказывается помочь вам только (что было бы хороший курс действий для тех, кто думает о помощи включить кражу контента). – hrbrmstr

+0

Ваш код работает для меня. Вы обновили R и пакеты? – cory

+0

Спасибо за проверку @cory! На какой платформе/R-версии вы? – Matifou

ответ

1

Как отметил @tbrugz, выпуск, похоже, поставляется с пакетом selectr.

Это происходит, однако, только при установке пакета с помощью apt-get install r-cran-selectr. Установка пакета с помощью sudo R, затем install.packages работает нормально.

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)) : 

не смог найти функцию «xpath_class»

2

Я понимаю, этот вопрос довольно старый, но я хотел, чтобы оставить комментарий, для тех, кто может иметь подобные проблемы. Я наткнулся на this same error и не смог найти вам полезной помощи. Итак, я подумал, что вместо того, чтобы нацеливать CSS, я попытаюсь настроить таргетинг на xpath. Я не знаю, что такое лучшая практика.

Мои оригинальные функции отлично работали на Ubuntu 16, R 3.4.0. Однако они не справились с Debian 8 R 3.3.3 и R 3.4.0.

Когда я изменил свой код на целевые xpaths вместо css, они начали работать как ожидалось. Например, изменение этого ...

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

к этому ...

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

разрешенное мой вопрос.

0

Я решил это, обновив xml2 непосредственно в местной библиотеке R, вместо того, чтобы полагаться на импорт rvests.

install.packages("xml2")