网上刮与rvest

时间:2016-03-31 13:54:37

标签: r web-scraping rvest

我试图使用r包rvest中的read_html来获取数据表。

我已尝试过以下代码:

library(rvest)
  raw <- read_html("https://demanda.ree.es/movil/peninsula/demanda/tablas/2016-01-02/2")

我不相信以上内容从表中提取数据,因为我看到了&#39; raw&#39;是2的列表:

'node:<externalptr>' and  'doc:<externalptr>'

我也试过抓住xpath:

html_nodes(raw,xpath = '//*[(@id = "tabla_generacion")]//*[contains(concat( " ", @class, " " ), concat( " ", "ng-scope", " " ))]')

有关下一步尝试的建议吗?

感谢。

1 个答案:

答案 0 :(得分:4)

此网站使用angular来拨打电话获取数据。您可以使用该调用来获取原始JSON。响应不是纯JSON,因此您不能只运行fromJSON(url),在解析数据之前必须先下载数据并删除非JSON内容。

library(jsonlite)
library(httr)
url <- "https://demanda.ree.es/WSvisionaMovilesPeninsulaRest/resources/demandaGeneracionPeninsula?callback=angular.callbacks._2&curva=DEMANDA&fecha=2016-01-02"
a <- GET(url)
a <- content(a, as="text")
# get rid of the non-JSON stuff...
a <- gsub("^angular.callbacks._2\\(", "", a)
a <- gsub("\\);$", "", a)
df <- fromJSON(a, simplifyDataFrame = TRUE)

我通过在Chrome中推送F12并查看“来源”标签找到了这一点。填写表格的数据必须来自某个地方...所以这只是找出问题的地方。我无法用rvest刮掉桌子。我不确定这个获取数据的调用是否在R中执行,就像在chrome中一样...所以可能没有数据可以让rvest刮掉。

enter image description here