Извлечение данных из Yahoo Finance - PullRequest
1 голос
/ 24 января 2020

Я создал приведенный ниже код, который отлично работает при получении некоторых данных (цены на акции и объемы) от Yahoo Finance для конкретной компании. Моя проблема в том, что я получил только 100 наблюдений. Я хотел бы получить все данные, которые там есть.

Как мне настроить код для достижения этой цели? Спасибо.

library(rvest)
library(tidyverse)

x <- 'SAP'
wb <- paste0('https://finance.yahoo.com/quote/', x, '/history?p=', x)

browseURL(wb)

read_html(wb) %>%
  html_node(css =  "table") %>%
  html_table %>%
  as_tibble -> df

1 Ответ

1 голос
/ 24 января 2020

На странице есть ссылка на загружаемый CSV. Вы можете указать компанию и период времени et c в R. перед его загрузкой.

Единственная проблема заключается в том, что в URL-адресе должен быть указан параметр "crumbs", который фактически является идентификатором сеанса, и вам нужно собрать это со страницы, чтобы создать URL.

Я написал функцию для всего этого. Все, что вам нужно сделать, это указать название компании, и оно предоставит вам все финансовые отчеты за последние 15 лет или около того в виде фрейма данных.

  get_financial_data <- function(company)
  {
    tmp <- tempfile()
    yahoo <- httr::handle('https://finance.yahoo.com/quote/')

    'https://finance.yahoo.com/quote/' %>%
    paste0(company)                    %>%
    paste0('/history?p=')              %>%
    paste0(company)                    %>%
    httr::GET(handle = yahoo)          %>%
    httr::content("text")               -> raw_html

    strsplit(raw_html, "crumb\":\"")   %>%
    unlist                             %>%
    strsplit("\"")                     %>%
    lapply(`[`, 1)                     %>%
    unlist                             %>%
    table                              %>%
    sort                               %>%
    rev                                %>%
    names                              %>%
    `[`(2)                             %>% 
    paste0("https://query1.finance.yahoo.com/v7/finance/download/", company, 
          "?period1=1079873500&period2=1579873500&interval=1d&events=history&crumb=", .) %>%
    httr::GET(handle = yahoo) %>%
    httr::content("text", encoding = "UTF-8") %>%
    writeBin(tmp, useBytes = T)

    suppressWarnings(read.csv(tmp) %>% tibble::as_tibble())
  }

Теперь вы можете просто сделать:

get_financial_data("SAP")
#> # A tibble: 3,988 x 7
#>    Date        Open  High   Low Close Adj.Close  Volume
#>    <fct>      <dbl> <dbl> <dbl> <dbl>     <dbl>   <int>
#>  1 2004-03-22  37.4  37.5  36.7  37.3      29.3 1717600
#>  2 2004-03-23  37.8  37.9  37.4  37.5      29.5 1417500
#>  3 2004-03-24  37.4  38.1  37.2  37.5      29.5 1682500
#>  4 2004-03-25  37.9  38.9  37.9  38.8      30.4 2233800
#>  5 2004-03-26  37.9  38.2  37.5  37.9      29.8 3343500
#>  6 2004-03-29  38.6  39.3  38.6  38.8      30.5 1886800
#>  7 2004-03-30  38.8  39.3  38.8  39.1      30.7  997900
#>  8 2004-03-31  39.5  39.8  39.3  39.3      30.9 1818600
#>  9 2004-04-01  39.8  40.6  39.8  40.6      31.9 2570600
#> 10 2004-04-02  40.9  41.3  40.6  41.1      32.3 1708200
#> # ... with 3,978 more rows
...