3

为什么 youtube.com 的页面来源不可抓取?

我尝试了以下方法(使用 phantomjs 以及带有 selenium 服务器的 chrome)

library(RSelenium)
pJS <- phantom(pjs_cmd = ...)
Sys.sleep(5) # give the binary a moment
remDr <- remoteDriver(browserName = 'phantomjs')
remDr$open()
remDr$navigate("https://www.youtube.com/")
remDr$getTitle()[[1]] # [1] "YouTube"
remDr$getPageSource()

回报:

Error in fromJSON(content, handler, default.size, depth, allowComments,  : 
  invalid JSON input
4

2 回答 2

3

这是编码的问题。暂时使用开发版本,直到下一个版本发布到 CRAN:

devtools::install_github("ropensci/RSelenium")
于 2015-05-02T08:32:37.000 回答
0

我同意问题很可能与编码有关。

例如,这样的问题似乎只出现在nasa.gov网站上与美俄空间合作相关的主题页面上(这表明这是由于网页内容中的西里尔字符造成的)。

Relenium我通过使用 deprecated where failed解决了这个问题RSelenium。为了使其Relenium顺利运行,Ubuntu 16.04我必须Firefox 25.0以防止任何更新的方式安装和配置它。设置过程中的另一个问题是正确安装rJava,这可能会由于缺少具有正确 Java 库路径的环境变量而失败。

系统配置如下:

R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

relenium_0.3.0; seleniumJars_2.41.0; rJava_0.9-8; RSelenium_1.3.5 

下面是一个可以用 Relenium 抓取但不能用 RSelenium 发行版抓取的页面示例:

link = "http://www.nasa.gov/mission_pages/station/expeditions/expedition14/index.html"

RSelenium 解决方案失败(使用 Firefox 版本34.0.5,或者25.0,不管):

startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate(link)
doc = unlist(remDr$getPageSource())

结果:“fromJSON 中的错误(内容、处理程序、default.size、深度、allowComments,:无效的 JSON 输入”

虽然 Relenium 可以接受:

 relenium_browser <- firefoxClass$new()
 relenium_browser$get(link)
 doc = unlist(relenium_browser$getPageSource())
 doc = read_html(doc)
于 2016-07-31T15:27:31.073 回答