如何用Python获取股票代码?

企业微信

使用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:

如何用Python获取股票代码?


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.SZsymbol是纯数字代码。高级功能需要积分,但基础获取代码是免费的。

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是主流选择,各有优劣。标准化处理和数据缓存是保证程序高效运行的关键。在实际项目中,应根据需求挑选合适的接口,并做好异常处理。通过本指南的代码示例,可以快速实现股票代码的批量获取,为后续的数据分析和策略开发打下基础。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/Python-gupiaodaima-288.html