【问题标题】:Query selector all in rvest package查询选择器全部在 rvest 包中
【发布时间】:2017-01-08 02:25:20
【问题描述】:

我尝试执行这个 javascript 命令:

document.querySelectorAll('div.Dashboard-section div.pure-u-1-1 span.ng-scope')[0].innerText

在 r 中使用 rvest 包使用以下代码:

library(rvest)

url <- read_html("")

url %>%
  html_nodes("div.Dashboard-section div.pure-u-1-1 span.ng-scope") %>%
  html_text()

但我认为是这样的:

character(0)

我也预料到了:

"Displaying results 1-25 of 10,897"

我能做什么?

【问题讨论】:

  • 这是一个动态网页。您在加载数据之前正在阅读 html。检查这个答案-stackoverflow.com/a/29965233/3927604
  • 您违反了他们的(尽管相当愚蠢)服务条款,您不得执行以下操作:“使用机器人或智能代理访问、搜索和/或系统地下载任何IEEE Xplore 的一部分。”

标签: javascript r rvest


【解决方案1】:

简而言之,rvest 包可以获取 HTML,但它不能执行 Javascript。您尝试获取的页面通过 AJAX、javascript 加载数据。

您可以按照用户 neoFox 的建议使用 RSelenium 包作为解决方法。 Selenium Webdriver 会为你启动 Firefox 或 Chrome,导航到页面,等待它加载。并从 HTML DOM 中获取数据片段。

或者使用更小的phantomjs 无头浏览器,它将 HTML 页面下载到 html 文件,而不会弹出浏览器 GUI。 Read in and parse 下载的带有 R 的 HTML 文件。

两者都需要一些认真的配置。 Selenium 是基于 Java 的。 Phantomjs 至少需要阅读它的文档。

您还可以检查页面,找出网站发出的 POST 请求,然后自己发送此 POST。然后获取它返回的 JSON 并自己计算结果项。

【讨论】:

  • 您可以用Rselenium 驱动phantomjs,就像使用 ffox 一样。
猜你喜欢
  • 2019-12-24
  • 2015-06-03
  • 2020-08-22
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多