如何自动化将美股标的添加至行业列表?求yfinance指令集
解决方案
一、获取美股标的列表(替代手动输入)
yfinance本身没有内置全量美股标的库,你可以从权威财经渠道(如标普官网、纳斯达克官网)下载美股成分股的CSV文件,再通过pandas读取为标的列表。例如:
import pandas as pd # 假设你已下载标普500成分股CSV,'Symbol'列为标的代码 sp500_tickers = pd.read_csv('sp500_tickers.csv')['Symbol'].tolist()
如果只是测试,可以先手动整理一小部分标的代码组成列表,比如tickers = ['AAPL', 'MSFT', 'XOM', 'CVX']。
二、自动按行业归类标的并获取数据
修改原代码,实现自动遍历标的、按大行业(能源、基础材料等)分类、批量抓取数据:
import yfinance as yf import pandas as pd import time # 1. 加载标的列表(替换成你的CSV路径或手动列表) tickers = pd.read_csv('sp500_tickers.csv')['Symbol'].tolist() # 2. 初始化行业分组字典,按需调整行业名称 industry_groups = { "能源": [], "基础材料": [], "可选消费": [], "必需消费": [], "医疗保健": [], "金融": [], "信息技术": [], "通信服务": [], "工业": [], "房地产": [], "公用事业": [], "未知行业": [] } # 3. 定义处理单个标的的函数 def process_ticker(ticker): try: comp = yf.Ticker(ticker) # 获取大行业信息,避免KeyError用get方法 sector = comp.info.get('sector', '未知行业') # 收集需要的基础数据 ticker_data = { '代码': ticker, '公司名称': comp.info.get('longName', ticker), '动态PE': comp.info.get('forwardPE'), '静态PE': comp.info.get('trailingPE'), '贝塔系数': comp.info.get('beta'), '最新收盘价': comp.history(period='1d')['Close'].iloc[-1] if not comp.history(period='1d').empty else None } # 归类到对应行业组 if sector in industry_groups: industry_groups[sector].append(ticker_data) else: industry_groups['未知行业'].append(ticker_data) print(f"已处理: {ticker}") # 加延迟避免请求过于频繁被限制 time.sleep(0.5) except Exception as e: print(f"处理失败 {ticker}: {str(e)}") # 4. 批量遍历所有标的 for ticker in tickers: process_ticker(ticker) # 示例:输出能源行业的标的数据 print("\n=== 能源行业标的数据 ===") for item in industry_groups['能源']: print(f"{item['公司名称']} ({item['代码']}): 动态PE={item['动态PE']}, 静态PE={item['静态PE']}, 贝塔={item['贝塔系数']}")
说明:
- 用
try-except捕获请求异常,避免单个标的失败导致程序中断 - 用
info.get(key, default)替代直接索引,防止字段缺失抛出KeyError - 添加
time.sleep(0.5)降低请求频率,避免被Yahoo Finance限制 - 数据存储为字典列表,方便后续导出为Excel或CSV
三、可靠的yfinance常用指令/字段列表
1. Ticker核心方法
yf.Ticker(ticker_code): 初始化单个标的对象comp.history(period='1d', interval='1m'): 获取历史行情,常用参数:- period:
1d(1天),5d(5天),1mo(1月),1y(1年),max(全部历史) - interval:
1m(1分钟),5m(5分钟),1h(1小时),1d(1天)
- period:
comp.financials: 年度利润表comp.quarterly_financials: 季度利润表comp.balance_sheet: 年度资产负债表comp.cashflow: 年度现金流量表comp.dividends: 获取分红记录yf.download(tickers_list, period='1y'): 批量下载多个标的行情,效率比逐个Ticker更高
2. comp.info常用关键字段
- 行业分类:
sector: 大行业(如能源、基础材料)industry: 子行业(如石油勘探生产)
- 估值指标:
forwardPE: 动态市盈率trailingPE: 静态市盈率marketCap: 总市值priceToBook: 市净率
- 盈利指标:
earningsPerShare: 每股收益profitMargins: 销售利润率
- 风险指标:
beta: 贝塔系数52WeekHigh: 52周最高价52WeekLow: 52周最低价
- 基本信息:
longName: 公司全称website: 公司官网phone: 联系电话
注意事项
- yfinance的数据来自Yahoo Finance公开接口,部分标的可能存在字段缺失,务必用
get方法获取字段 - 批量请求时不要去掉延迟,否则容易被临时限制访问
- 如果需要全量美股标的,优先从正规财经网站下载CSV,避免使用非正规爬虫工具
内容的提问来源于stack exchange,提问作者k07
相关产品推荐
相关产品推荐

