6

我试图简单地复制 的示例rvest::html_nodes(),但遇到错误:

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

do.call(method, list(parsed_selector)) 中的错误:找不到函数“xpath_element”

如果我加载诸如httr, xml2,之类的包也会发生同样的情况selectr。我似乎也有这些软件包的最新版本......

诸如xpath_element,之类的函数xpath_combinedselector位于哪些包中?我如何让它工作?请注意,我在 Ubuntu 16.04 上运行,因此该代码可能在其他平台上运行......

4

4 回答 4

2

我知道这个问题已经很老了,但我想为可能有类似问题的人发表评论。

我偶然发现了同样的错误,无法找到太多帮助。所以,我认为不是以 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()

解决了我的问题。

于 2017-06-07T13:18:55.753 回答
1

正如@tbrugz 所指出的,问题似乎来自于 package 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”

于 2017-03-22T18:43:42.030 回答
0

我通过xml2直接更新到我的本地 R 库而不是依赖于rvests导入来解决这个问题。

install.packages("xml2")

于 2017-08-08T09:40:47.520 回答
0

有同样的问题。我rverse直接从 macOS 10.13.5 上的 Jupyter notebook 安装。rverse直接从r-shell为我修复的这个重新安装。步骤: 1. 输入r终端并按enter。2.install.packages('rvest')

于 2018-06-23T13:49:10.827 回答