使用Yahoo Finance进行网络抓取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Yahoo Finance进行网络抓取相关的知识,希望对你有一定的参考价值。

自从对Yahoo Finance进行了一些页面调整以来,我已经看到了一些用于webscraping的字符串,并且以下脚本对一个股票行情很好,但是创建了一个循环,对许多股票行情重复,然后将它们绑定为一个大的每行具有相应代码的数据框导致以下消息:

open.connection(x,“ rb”)中的错误:HTTP错误503。

这里是带有循环的脚本-“ tickers”:

library(quantmod)
symbolData2 <- stockSymbols(exchange="NASDAQ")
symbolData3 <- stockSymbols(exchange="NYSE")
complete_symbols <- rbind(symbolData2,symbolData3)  
tickers <- paste(complete_symbols$Symbol,sep=',')
stocks <- tickers

for (s in stocks) {
  url <- paste0("https://finance.yahoo.com/quote/",s,"/key-statistics?p=", s)
  df <- url %>% 
  read_html() %>% 
  html_table(header = FALSE) %>% 
  map_df(bind_cols) %>% 
  as_tibble()

  assign(s, df)

  df <- get(s)
  df['stock'] <- s
  assign(s, df)

}  

stockdata <- do.call(rbind, stockdatalist)

stockdata <- stockdata[, c(ncol(stockdata), 1:ncol(stockdata)-1)]

如果某个特定的代码正在停止此操作,则很难查明是哪个代码(我希望脚本能够跳过它)。任何帮助完成此工作的人都非常感谢。

答案

我重写了答案,仅获得基本数据。首先,我将您的抓取请求放入一个函数中,而不是循环。接下来,我基于purrr的possibly函数松散地编写了一个错误捕获器函数。这样就可以返回一个函数而不是默认值。然后,您可以使用map_df遍历所有股票代码。只要有错误,数据将为NA,但将显示代码,并在错误列中填写。

以上是关于使用Yahoo Finance进行网络抓取的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的代码中使用自定义 CSV 而不是 Yahoo Finance 数据?

Ruby中可用的网页抓取宝石/工具[关闭]

使用 BeautifulSoup 搜索 Yahoo Finance

Yahoo Finance API 股票/股票代码查找只允许完全匹配

Yahoo! Finance财经数据PYTHON临时读取方法

如何从Yahoo Finance中解析类似JSON的数据?