使用Yahoo Finance进行网络抓取

问题描述 投票:0回答:1

自从对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)]

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

r for-loop web-scraping quantmod
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.