#r #web-scraping #tidyverse #rvest
#r #соскабливание паутины #tidyverse #rvest
Вопрос:
Я пытаюсь получить полный набор данных для исторических данных биткойнов от yahoo finance с помощью веб-скребка, это мой первый фрагмент кода варианта:
library(rvest) library(tidyverse) crypto_url lt;- read_html("https://finance.yahoo.com/quote/BTC-USD/history?period1=1480464000amp;period2=1638230400amp;interval=1damp;filter=historyamp;frequency=1damp;includeAdjustedClose=true") cryp_table lt;- html_nodes(crypto_url,css = "table") cryp_table lt;- html_table(cryp_table,fill = T) %gt;% as.data.frame()
Я ссылка, которую я предоставляю read_html() в течение длительного периода времени, уже выбрана, однако она просто получает первые 101 строку, а последняя строка-это сообщение о загрузке, которое вы получаете, когда продолжаете прокручивать, это мой второй снимок, но я получаю то же самое:
col_page lt;- read_html("https://finance.yahoo.com/quote/BTC-USD/history?period1=1480464000amp;period2=1638230400amp;interval=1damp;filter=historyamp;frequency=1damp;includeAdjustedClose=true") cryp_table lt;- col_page %gt;% html_nodes(xpath = '//*[@id="Col1-1-HistoricalDataTable-Proxy"]/section/div[2]/table') %gt;% html_table(fill = T) cryp_final lt;- cryp_table[[1]]
Как я могу получить весь набор данных?
Комментарии:
1. Похоже, что данные относятся только к 2014 году. Вы пробовали нажать «Период времени» — gt; «Макс», а затем нажать кнопку «Загрузить», чтобы загрузить CSV-файл? Это было бы намного проще, чем соскабливать.
2. Или же вы можете использовать
RSelennum
Ответ №1:
Я думаю, вы можете получить ссылку для загрузки, если вы просматриваете сеть, вы видите ссылку для загрузки, в этом случае:
«https://query1.finance.yahoo.com/v7/finance/download/BTC-USD?period1=1480464000amp;period2=1638230400amp;interval=1damp;events=historyamp;includeAdjustedClose=true»
Ну, эта ссылка выглядит как URL-адрес сайта, т. Е. Мы можем изменить ссылку URL, чтобы получить ссылку для загрузки и прочитать csv. Смотрите код:
library(stringr) library(magrittr) site lt;- "https://finance.yahoo.com/quote/BTC-USD/history?period1=1480464000amp;period2=1638230400amp;interval=1damp;filter=historyamp;frequency=1damp;includeAdjustedClose=true" base_download lt;- "https://query1.finance.yahoo.com/v7/finance/download/" download_link lt;- site %gt;% stringr::str_remove_all(". (?lt;=quote/)|/history?|amp;frequency=1d") %gt;% stringr::str_replace("filter", "events") %gt;% stringr::str_c(base_download, .) readr::read_csv(download_link)
Комментарии:
1. Этот вариант работает, спасибо!