2016-03-31 66 views
2

我试图抓住一个数据表使用从R包rvest read_html。web刮与rvest

我尝试下面的代码:

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

我不相信从上面的表格拉的数据,因为我看到的“原始”是2的列表:

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

我试图抓住的XPath太:什么尝试下一个

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

有什么建议?

谢谢。

回答

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并查看“Sources”选项卡找到了这个。填满表格的数据必须来自某个地方...所以这只是一个确定问题的地方。我无法使用rvest来刮桌子。我不确定是否在R中执行了获取数据的调用,因为它是在chrome中的......所以可能没有任何数据可供刮取。

enter image description here

+0

太棒了,谢谢!你有什么机会可以解释你在哪里找到这个电话?可以通过在Chrome中使用“检查”来找到它吗? – cam333

+0

@ cam333我更新了我的答案更详细 – cory

+0

非常酷,感谢您的解释。这对我来说会派上用场。 – cam333