遍历yfinance股票列表的最快方法是什么?



我使用python yfinance yahoo API进行股票数据检索。现在我得到的是钉住比率,这是一个公司价格与其增长和收益相关的指标。我从这里下载了一个csv文件:https://www.nasdaq.com/market-activity/stocks/screener。它恰好有8000只股票。

我所做的是获得符号列表,并迭代它以访问雅虎股票。然后我得到一个use ticker。info方法,它返回一个字典。我在8000个符号中重复这个过程。它以每分钟6个符号的速度运行,这是不可行的。是否有另一种API或另一种结构更快的方法?我不关心API,只要我能得到增长、收益、每股收益等基本信息就行。

代码如下:

import pandas as pd
import yfinance as yf

data = pd.read_csv("data/stock_list.csv")
symbols = data['Symbol']
for symbol in symbols:
stock = yf.Ticker(symbol)
try:
if stock.info['pegRatio']:
print(stock.info['shortName'] + " : " + str(stock.info['pegRatio']))
except KeyError:
pass

似乎当需要从Ticker.info属性获取某些数据时,会发出HTTP请求来获取它们。多线程将有助于改善这些问题。试试这个:-

import pandas as pd
import yfinance as yf
import concurrent.futures
data = pd.read_csv('data/stock_list.csv')
def getPR(symbol):
sn = None
pr = None
try:
stock = yf.Ticker(symbol)
pr = stock.info['pegRatio']
sn = stock.info['shortName']
except Exception:
pass
return (sn, pr)

with concurrent.futures.ThreadPoolExecutor() as executor:
futures = {executor.submit(getPR, sym): sym for sym in data['Symbol']}
for future in concurrent.futures.as_completed(futures):
sn, pr = future.result()
if sn:
print(f'{sn} : {pr}')

相关内容

最新更新