硒 |获取 youtube 页面源
rselenium | get youtube page source
为什么 youtube.com 的页面源不可抓取?
我尝试了以下方法(使用 phantomjs 以及 chrome 和 selenium 服务器)
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()
Returns:
Error in fromJSON(content, handler, default.size, depth, allowComments, :
invalid JSON input
编码问题。现在使用开发版本,直到下一个版本发布到 CRAN:
devtools::install_github("ropensci/RSelenium")
我同意问题很可能出在编码上。
例如,nasa.gov网站似乎只出现在与美俄space合作相关的主题页面上(这表明这是由于网页内容中的西里尔字符引起的)。
我通过使用已弃用的 Relenium
解决了问题,其中 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 解决方案失败(使用 34.0.5
或 25.0
版本的 Firefox,无论):
startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate(link)
doc = unlist(remDr$getPageSource())
结果:“fromJSON(content, handler, default.size, depth, allowComments, 中出现错误:
无效 JSON 输入
虽然 Relenium 可以:
relenium_browser <- firefoxClass$new()
relenium_browser$get(link)
doc = unlist(relenium_browser$getPageSource())
doc = read_html(doc)
为什么 youtube.com 的页面源不可抓取?
我尝试了以下方法(使用 phantomjs 以及 chrome 和 selenium 服务器)
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()
Returns:
Error in fromJSON(content, handler, default.size, depth, allowComments, :
invalid JSON input
编码问题。现在使用开发版本,直到下一个版本发布到 CRAN:
devtools::install_github("ropensci/RSelenium")
我同意问题很可能出在编码上。
例如,nasa.gov网站似乎只出现在与美俄space合作相关的主题页面上(这表明这是由于网页内容中的西里尔字符引起的)。
我通过使用已弃用的 Relenium
解决了问题,其中 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 解决方案失败(使用 34.0.5
或 25.0
版本的 Firefox,无论):
startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate(link)
doc = unlist(remDr$getPageSource())
结果:“fromJSON(content, handler, default.size, depth, allowComments, 中出现错误: 无效 JSON 输入
虽然 Relenium 可以:
relenium_browser <- firefoxClass$new()
relenium_browser$get(link)
doc = unlist(relenium_browser$getPageSource())
doc = read_html(doc)