【问题标题】:Scraping historical data from coinmarketcap从 coinmarketcap 中抓取历史数据
【发布时间】:2021-02-21 23:29:29
【问题描述】:

我通常不会从网络上抓取表格,但由于某种原因,当我尝试从下一页抓取历史数据时,我无法选择想要的表格。

这是链接和我的代码

library(tidyverse)
library(rvest)

url <-read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/")
  
table <- url %>% 
  html_table() %>% .[[1]] %>% as.data.frame()
  

谢谢

【问题讨论】:

    标签: r web-scraping tidyverse rvest


    【解决方案1】:

    数据很好地隐藏在页面上的script 元素中。它是通过 JavaScript 动态加载到 table 中的,这就是你找不到它的原因。

    以下内容从script 元素(ID 为__NEXT_DATA__)中提取数据。

    library(tidyverse)
    library(rvest)
    
    url <-read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/")
    
    table <- url %>% 
      html_node("#__NEXT_DATA__") %>%
      html_text() %>%
      jsonlite::fromJSON()
    
    table$props$initialState$cryptocurrency$ohlcvHistorical[[1]]$quotes
    

    给了

                      time_open               time_close                time_high                 time_low quote.USD.open quote.USD.high
    1  2020-10-10T00:00:00.000Z 2020-10-10T23:59:59.999Z 2020-10-10T03:16:44.000Z 2020-10-10T00:01:41.000Z       11059.14       11442.21
    2  2020-10-11T00:00:00.000Z 2020-10-11T23:59:59.999Z 2020-10-11T15:31:43.000Z 2020-10-11T00:52:06.000Z       11296.08       11428.81
    ...
    

    【讨论】:

    • 非常感谢!你怎么知道桌子是隐藏的?它总是调用 NEXT_DATA 或者你只需​​要知道如何阅读 JS?
    • 我在浏览器中转到“检查元素”并搜索我在表格中看到的一些数字(在本例中为市值)。然后,我看到它们发生在 script 字段中。一般不叫__NEXT_DATA__,这只是coinmarketcap的约定。
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多