
使用Python获取股票代码的三种方式
在量化交易中,获取准确的股票代码是数据分析和策略回测的前提。Python生态提供了多个数据接口库,其中akshare和tushare是最常用的免费方案。本节将分别演示如何通过这两个库获取不同市场的股票代码。
1. 使用akshare获取A股股票代码
akshare是一个开源的数据接口库,其数据来源于公开网站,无需注册即可使用。安装方式为pip install akshare,以下代码获取A股全部股票代码:
import akshare as ak
# 获取A股股票列表
df = ak.stock_info_a_code_name()
print(df.head())
运行结果将包含两列:code(股票代码)和name(股票名称)。akshare还支持其他市场,例如港股和美股,调用相应接口即可。
2. 使用tushare获取股票代码
tushare需要注册账号并获取token,但数据稳定性较高。安装pip install tushare,然后设置token:

import tushare as ts
pro = ts.pro_api('你的token')
# 获取沪深股票列表
df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry')
print(df.head())
ts_code是带交易所后缀的代码,如000001.SZ,symbol是纯数字代码。高级功能需要积分,但基础获取代码是免费的。
3. 获取港股和美股股票代码
对于港股,akshare提供stock_hk_spot_em()获取所有港股实时行情,其中包含代码。对于美股,可使用stock_us_spot_em()获取。这些接口返回的代码字段即为股票代码。
import akshare as ak
# 港股代码
hk_df = ak.stock_hk_spot_em()
hk_codes = hk_df['代码'].tolist()
# 美股代码
us_df = ak.stock_us_spot_em()
us_codes = us_df['代码'].tolist()
注意,所有接口都需要网络连接,数据源可能因网站改版而变化,建议定期检查库版本。
股票代码的标准化与清洗
获取到的股票代码通常有不同格式,需要统一处理。例如A股代码有6位数字,但有的接口会带交易所前缀。标准化过程包括:
去除多余空格和特殊字符
统一为整数或字符串格式
对缺失值进行过滤
以下代码展示如何将akshare获取的代码转换为纯数字,并删除退市股票:
import akshare as ak
import pandas as pd
df = ak.stock_info_a_code_name()
df['code'] = df['code'].astype(str).str.zfill(6) # 补零到6位
# 过滤掉ST股(名称中包含ST)
df = df[~df['name'].str.contains('ST')]
print(df.head())
对于tushare返回的ts_code,可提取symbol列直接使用。处理数据时,注意不同接口的代码字段名可能不同,需根据实际返回调整。
批量获取股票代码的策略
在需要大量代码时,应避免重复请求接口。策略包括:
缓存数据到本地文件(CSV或Excel)
定期更新,而非每次运行时都请求
使用多线程或异步请求提高效率
以下是一个简单的缓存实现:
import os
import pandas as pd
import akshare as ak
def get_stock_codes(use_cache=True):
cache_file = 'stock_codes.csv'
if use_cache and os.path.exists(cache_file):
df = pd.read_csv(cache_file)
else:
df = ak.stock_info_a_code_name()
df.to_csv(cache_file, index=False)
return df['code'].tolist()
codes = get_stock_codes()
print(len(codes))
通过缓存,可以显著减少网络请求,提升程序运行速度。
使用股票代码进行后续操作
获取代码后,常需要批量获取行情数据或财务数据。例如,使用akshare获取多只股票的历史日线数据:
import akshare as ak
def get_history(code, start_date='20200101', end_date='20231231'):
df = ak.stock_zh_a_hist(symbol=code, period='daily', start_date=start_date, end_date=end_date, adjust='qfq')
return df
# 获取前5只股票的数据
codes = ['000001', '000002', '600000']
for code in codes:
print(f'获取{code}的数据')
data = get_history(code)
print(data.head())
注意接口的限频要求,勿高频请求。若需要更高效的数据获取,可考虑升级tushare积分或使用其他数据库。
股票代码的存储与管理
在量化项目中,股票代码需要长期存储。推荐使用SQLite或CSV文件。SQLite支持快速查询,适合中大型项目。
import sqlite3
import pandas as pd
import akshare as ak
conn = sqlite3.connect('stocks.db')
df = ak.stock_info_a_code_name()
df.to_sql('stocks', conn, if_exists='replace', index=False)
# 查询
query = pd.read_sql('SELECT * FROM stocks WHERE code LIKE "60%"', conn)
print(query)
规范化存储有助于后续的数据管理和策略回测。
处理接口限制与异常
免费接口常受访问频率和流量限制。应对措施包括:
使用try-except捕获异常,并加入重试机制
设置合理的时间间隔,如sleep(0.5)
使用代理IP或分布式请求(高级)
以下为带重试的代码获取函数:
import time
import akshare as ak
from tenacity import retry, stop_after_attempt, wait_fixed
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def get_codes_retry():
return ak.stock_info_a_code_name()
try:
df = get_codes_retry()
print(df.head())
except Exception as e:
print(f'Failed: {e}')
合理使用重试可以提升健壮性。
股票代码的获取是量化交易的第一步,Python提供了多种库和方法。akshare和tushare是主流选择,各有优劣。标准化处理和数据缓存是保证程序高效运行的关键。在实际项目中,应根据需求挑选合适的接口,并做好异常处理。通过本指南的代码示例,可以快速实现股票代码的批量获取,为后续的数据分析和策略开发打下基础。