在 Yahoo! 中抓取关键统计数据用 R 理财
Web scraping of key stats in Yahoo! Finance with R
有没有人有从 Yahoo! 抓取数据的经验?使用 R 的财务关键统计页面?我熟悉使用 read_html
、html_nodes()
和 rvest
包中的 html_text()
直接从 html 抓取数据。但是,这个网页MSFT key stats有点复杂,我不确定所有的统计信息是否都保存在XHR、JS或Doc中。我猜数据存储在 JSON 中。如果有人知道用 R 提取和解析此网页数据的好方法,请回答我的问题,在此先感谢!
或者如果有更方便的方法通过 quantmod
或 Quandl
提取这些指标,请告诉我,那将是一个非常好的解决方案!
我很久以前就放弃了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)
我知道这是一个较旧的话题,但我用它来抓取 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]])
干杯,
苏迪
当我将这里显示的方法与 XML 库一起使用时,我收到警告
readLines(page) 中的警告:找到的最后一行不完整
'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
有很多可用的迪士尼股票。
有没有人有从 Yahoo! 抓取数据的经验?使用 R 的财务关键统计页面?我熟悉使用 read_html
、html_nodes()
和 rvest
包中的 html_text()
直接从 html 抓取数据。但是,这个网页MSFT key stats有点复杂,我不确定所有的统计信息是否都保存在XHR、JS或Doc中。我猜数据存储在 JSON 中。如果有人知道用 R 提取和解析此网页数据的好方法,请回答我的问题,在此先感谢!
或者如果有更方便的方法通过 quantmod
或 Quandl
提取这些指标,请告诉我,那将是一个非常好的解决方案!
我很久以前就放弃了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)
我知道这是一个较旧的话题,但我用它来抓取 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]])
干杯, 苏迪
当我将这里显示的方法与 XML 库一起使用时,我收到警告 readLines(page) 中的警告:找到的最后一行不完整 '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
有很多可用的迪士尼股票。