在雅虎2021年年中做出改变后,希望使用yfinance作为pandas_finance的替代方案来获取股票信息(行业、行业、个人资料)。我有一个大约50-100个股票代码(unchecked_tickers)的列表,我希望循环通过这些列表来获得行业、行业和个人资料。这是我当前的代码,对于pandas_finance来说相对较快,但对于yfinance来说需要几个小时:
sector = []
for i in range(len(unchecked_tickers)):
try:
sec_data = yf.Ticker(unchecked_tickers[i]).info['sector']
sector.append(sec_data)
except:
sector.append('0')
unchecked_earnings_df["Sector"] = sector
industry = []
for i in range(len(unchecked_tickers)):
try:
ind_data = yf.Ticker(unchecked_tickers[i]).info['industry']
industry.append(ind_data)
except:
industry.append('0')
unchecked_earnings_df["Industry"] = industry
desc = []
for i in range(len(unchecked_tickers)):
try:
desc_data = yf.Ticker(unchecked_tickers[i]).info['longBusinessSummary']
desc.append(desc_data)
except:
desc.append('0')
unchecked_earnings_df["Desc"] = desc
unchecked_earnings_df.head()
发布于 2021-07-20 04:55:38
每个yf.Ticker(“股票报价器”)函数调用都会向存储股票数据的服务器发送一个请求。如果您多次执行此请求,则可能需要一段时间。在某些情况下,获取响应所需的时间会变得更长,这可能是由服务器引起的,因为服务器不希望你在这么短的时间内发送许多请求,但我不确定这是否是真正的原因。您甚至可以证明,当您测量每个yf.Ticker()函数调用前后的时间并打印差值时。要解决响应时间过长的问题,你无能为力。但是您的代码中有很多可以改进的地方。主要的问题是,你有3个不同的for循环,它们都执行相同的迭代,并且都在开始时执行相同的yf.Ticker(‘股票报价器’)函数调用,这是花费时间最多的函数。为了提高性能,您可以在一个for循环中执行这三个for循环中的所有操作,并在每次迭代中只调用一次yf.Ticker()函数。就像这样:
for i in range(len(unchecked_tickers)):
try:
ticker = yf.Ticker(unchecked_tickers[i])
sector.append(ticker.info['sector'])
industry.append(ticker.info['industry'])
#.....
except:
sector.append('0')
industry.append('0')
#.....
这样,你只需要为每个滚动条调用一次yf.Ticker()函数,而不是三次,这将使你的程序速度提高三倍。
https://stackoverflow.com/questions/68445273
复制相似问题