【问题标题】:web scrape with rvest用 rvest 刮网
【发布时间】:2016-03-31 13:54:37
【问题描述】:

我正在尝试使用 r 包 rvest 中的 read_html 获取数据表。

我试过下面的代码:

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", " " ))]')

关于下一步尝试什么的任何建议?

谢谢。

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    本网站正在使用 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 抓取。

    【讨论】:

    • 太棒了,谢谢!你有没有机会解释你在哪里找到那个电话?在Chrome中使用“inspect”能找到吗?
    • 非常酷,感谢您的解释。这对我来说会派上用场。
    • @cory 看起来是一个有趣的解决方案...你认为你可以帮助解决这个问题吗 (stackoverflow.com/questions/42208566/…)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多