Веб-анализ ключевой статистики в Yahoo! Финансы с R

Есть ли у кого-нибудь опыт извлечения данных из Yahoo! Страница ключевой статистики финансов с R? Мне знакомо извлечение данных непосредственно из HTML с использованием read_html, html_nodes() и html_text() из пакета rvest. Однако эта статистика ключей MSFT на этой веб-странице немного сложна, Я не уверен, что вся статистика хранится в XHR, JS или Doc. Я предполагаю, что данные хранятся в JSON. Если кто-то знает хороший способ извлечь и проанализировать данные для этой веб-страницы с помощью R, любезно ответьте на мой вопрос, заранее большое спасибо!

Или, если есть более удобный способ извлечения этих показателей с помощью quantmod или Quandl, любезно дайте мне знать, это было бы очень хорошим решением!


person tonykuoyj    schedule 25.10.2016    source источник
comment
В качестве альтернативы вы можете изучить методы getFinancials() и viewFinancials() в quantmod. Однако он использует данные из Google Finance, а другие параметры src пока не реализованы.   -  person R.S.    schedule 25.10.2016
comment
С docl = htmlParse('http://finance.yahoo.com/quote/MSFT/key-statistics?p=MSFT') вы можете увидеть раздел (function (root) { /* -- Data -- */, где, по-видимому, находятся данные. Например "beta":{"raw":1.39107,"fmt":"1.39"}, удачи!   -  person Robert    schedule 25.10.2016
comment
Спасибо @Robert, я также нашел еще один документ в XHR Y! Finanace Stats, в котором хранится чистый JSON для показателей! Большое спасибо, позже поделюсь скриптом парсинга.   -  person tonykuoyj    schedule 27.10.2016
comment
Ознакомьтесь с этими ответами.   -  person hvollmeier    schedule 27.10.2016


Ответы (3)


Я давно отказался от Excel. R определенно подходит для таких вещей.

library(XML)

stocks <- c("AXP","BA","CAT","CSCO")

for (s in stocks) {
      url <- paste0("http://finviz.com/quote.ashx?t=", s)
      webpage <- readLines(url)
      html <- htmlTreeParse(webpage, useInternalNodes = TRUE, asText = TRUE)
      tableNodes <- getNodeSet(html, "//table")

      # ASSIGN TO STOCK NAMED DFS
      assign(s, readHTMLTable(tableNodes[[9]], 
                header= c("data1", "data2", "data3", "data4", "data5", "data6",
                          "data7", "data8", "data9", "data10", "data11", "data12")))

      # ADD COLUMN TO IDENTIFY STOCK 
      df <- get(s)
      df['stock'] <- s
      assign(s, df)
}

# COMBINE ALL STOCK DATA 
stockdatalist <- cbind(mget(stocks))
stockdata <- do.call(rbind, stockdatalist)
# MOVE STOCK ID TO FIRST COLUMN
stockdata <- stockdata[, c(ncol(stockdata), 1:ncol(stockdata)-1)]

# SAVE TO CSV
write.table(stockdata, "C:/Users/your_path_here/Desktop/MyData.csv", sep=",", 
            row.names=FALSE, col.names=FALSE)

# REMOVE TEMP OBJECTS
rm(df, stockdatalist)
person Community    schedule 09.11.2016
comment
Отлично, еще хотелось бы почистить от Finviz. Спасибо, что предложили альтернативу Y! Финансы. - person tonykuoyj; 10.11.2016

Я знаю, что это более старая ветка, но я использовал ее для очистки таблиц Yahoo Analyst, так что думаю, что поделюсь ею.

# Yahoo webscrape Analysts
library(XML)

symbol = "HD"
url <- paste('https://finance.yahoo.com/quote/HD/analysts?p=',symbol,sep="")
webpage <- readLines(url)
html <- htmlTreeParse(webpage, useInternalNodes = TRUE, asText = TRUE)
tableNodes <- getNodeSet(html, "//table")

earningEstimates <- readHTMLTable(tableNodes[[1]])
revenueEstimates <- readHTMLTable(tableNodes[[2]])
earningHistory <- readHTMLTable(tableNodes[[3]])
epsTrend <- readHTMLTable(tableNodes[[4]])
epsRevisions <- readHTMLTable(tableNodes[[5]])
growthEst <- readHTMLTable(tableNodes[[6]])

Ура, Соди

person Aaron Soderstrom    schedule 28.03.2018

Когда я использую методы, показанные здесь с библиотекой XML, я получаю предупреждение Предупреждение в readLines (страница): неполная последняя строка найдена на https://finance.yahoo.com/quote/DIS/key-statistics?p=DIS.

Мы можем использовать rvest и xml2 для более чистого подхода. Этот пример демонстрирует, как получить ключевую статистику из ключевой статистики Yahoo! Финансовая страница. Здесь я хочу получить акции в обращении. Я не верю, что float доступен в Quantmod, но некоторые ключевые значения статистики доступны. Вам нужно будет сослаться на список.

library(xml2)
library(rvest)

getFloat <- function(stock){
    url <- paste0("https://finance.yahoo.com/quote/", stock, "/key-statistics?p=", stock)
    tables <- read_html(url) %>%
    html_nodes("table") %>%
    html_table()
    float <- as.vector(tables[[3]][4,2])
    last <- substr(float, nchar(float)-1+1, nchar(float))
    float <-gsub("[a-zA-Z]", "", float)
    float <- as.numeric(as.character(float))
    if(last == "k"){
        float <- float * 1000
    } else if (last == "M") {
        float <- float * 1000000
    } else if (last == "B") {
        float <- float * 1000000000
    }
    return(float)
}
getFloat("DIS")

[1] 1.81e+09

Это много доступных акций Disney.

person user2863275    schedule 03.01.2021