首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R使用rvest的Web抓取coinmarketcap

R使用rvest的Web抓取coinmarketcap
EN

Stack Overflow用户
提问于 2021-04-26 17:14:51
回答 2查看 253关注 0票数 0

我正在尝试使用rvest-package从coinmarketcap.com获得一张表。

下面显示了一种解决方案。然而,这个不再起作用了。结果表为空。显然,这个网站不知何故发生了变化。

有人能提供解决方案吗?

首先要感谢大家!

代码语言:javascript
复制
library(rvest)
library(tidyverse)
library(xml2)

url<- "https://coinmarketcap.com/currencies/bitcoin/historical-data/"

table <- url %>% 
  read_html()%>%
  html_table() %>% 
  as.data.frame()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-27 06:00:14

你不需要增加浏览器的开销。您可以模拟API调用并解析json响应。

代码语言:javascript
复制
library(jsonlite)
library(tidyverse)

data <-jsonlite::read_json('https://web-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical?id=1&convert=USD&time_start=1614297600&time_end=1619395200')$data$quotes
df <- map_df(data, function(x) {data.frame(x$quote)})
print(df)

# 1614297600 is Fri Feb 26 2021 00:00:00 GMT+0000     for 2021-02-27
# 1619395200  Mon Apr 26 2021 00:00:00 GMT+0000       for  2021-04-25

time_startend_start是unix时间戳,看起来像是一天的偏移量,不过您需要探索它是如何工作的,以及偏移量是否会在银行节假日/周末之间发生变化。

票数 1
EN

Stack Overflow用户

发布于 2021-04-26 19:27:35

现在动态加载网页。因此,您需要使用RSelenium,而不仅仅是rvest

下面的代码适用于我:

代码语言:javascript
复制
url<- "https://coinmarketcap.com/currencies/bitcoin/historical-data/"

# RSelenium with Firefox
rD <- RSelenium::rsDriver(browser="firefox", port=4546L, verbose=F)
remDr <- rD[["client"]]
remDr$navigate(url)
Sys.sleep(4)

# get the page source
web <- remDr$getPageSource()
web <- xml2::read_html(web[[1]])

table <- html_table(web) %>%
  as.data.frame()

# close RSelenium
remDr$close()
gc()
rD$server$stop()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67263876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档