我试图使用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", " " ))]')
有关下一步尝试的建议吗?
感谢。
答案 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刮掉。