网页抓取雅虎的关键统计数据!财务与R.

时间:2016-10-25 16:48:14

标签: r web-scraping quantmod rvest quandl

是否有人从Yahoo!中抓取数据? R的财务关键统计页面?我很熟悉使用来自read_html包的html_nodes()html_text()rvest直接从html抓取数据。但是,这个网页MSFT key stats有点复杂,我不确定是否所有统计数据都保存在XHR,JS或Doc中。我猜数据存储在JSON中。如果有人知道用R提取和解析此网页的数据的好方法,请提前回答我的问题,非常感谢!

或者,如果有更便捷的方式通过quantmodQuandl提取这些指标,请告知我们,这将是一个非常好的解决方案!

3 个答案:

答案 0 :(得分:4)

很久以前我放弃了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)

答案 1 :(得分:4)

我知道这是一个较老的线程,但我用它来刮掉Yahoo Analyst表,所以我想我会分享。

<iframe src="//www.dailymotion.com/embed/video/x5iscr6" width="480" height="270"></iframe>

干杯, Sody

答案 2 :(得分:2)

当我将此处显示的方法与 XML 库一起使用时,我收到警告 readLines(page) 中的警告:在上找到不完整的最后一行 'https://finance.yahoo.com/quote/DIS/key-statistics?p=DIS'

我们可以使用 rvest 和 xml2 来获得更简洁的方法。此示例演示如何从关键统计信息 Yahoo! 中提取关键统计信息。财务页面。在这里,我想获得股权的浮动。我不相信 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

迪士尼有很多可用的股票。

相关问题