首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何抓取股票 / 期货历史行情数据

如何抓取股票 / 期货历史行情数据

原创
作者头像
hollyx
发布2026-09-20 20:18:22
发布2026-09-20 20:18:22
1170
举报

抓取股票、期货历史行情数据的完整流程通常包括五步:选择合规的数据来源、用 Python 发起数据请求、解析返回的数据、清洗和规范化处理、以及保存到本地文件或数据库。抓取时要特别注意几个要点:遵守数据源的使用条款和频率限制、做好异常处理和重试、正确处理复权问题、以及注意数据的时间对齐。对新手来说,入门可以从提供现成接口的免费数据源开始,比自己从网页硬爬要简单可靠得多。本文讲清楚历史行情数据抓取的通用流程和关键注意事项。

一、抓取前先说三句话

在动手抓数据之前,我必须先说三句重要的话:

第一句:合规第一。 抓取任何数据,都要遵守数据来源的使用条款、robots 协议和相关法规。不是所有数据都能随便抓,也不是所有抓取方式都合规。先确认你抓的东西、抓的方式是被允许的,这是底线。

第二句:能用接口就别硬爬。 很多数据源提供了现成的数据接口(API),直接调用又稳定又规范。相比从网页 HTML 里硬爬,用官方接口简单可靠得多。新手优先选有接口的数据源。

第三句:善待数据源。 抓取时要控制频率、别把人家服务器搞崩,这既是道德也是避免被封的现实需要。

记住这三句,我们再讲技术流程。下面以通用流程讲解,实际请以你所用数据源的规定为准。

二、第一步:选择合规的数据来源

抓取的第一步是选对数据源。对新手,推荐优先选择提供现成接口的免费数据源——它们通常把数据整理好了,通过接口就能直接获取股票、期货的历史行情,省去了自己从网页解析的大量麻烦。

选择数据源时考虑几点:

  • 是否提供接口:有接口的优先;
  • 数据覆盖:是否有你需要的品种、周期、历史长度;
  • 使用条款:是否允许你的使用方式,有无频率限制;
  • 数据质量:数据是否准确、完整。

别一上来就挑战"从复杂网页硬爬"这种高难度动作,从有接口的数据源入手,成功率高得多。

三、第二步:用 Python 发起请求

选好数据源,用 Python 向它请求数据。如果数据源提供了 Python 库,直接调用它的函数即可;如果是 Web API,则用 requests 等库发请求。下面是一个通用示意:

代码语言:python
复制
import requests
import time

def fetch_data(symbol, start_date, end_date):
    """通用示意:向数据接口请求历史行情"""
    url = "数据源的接口地址"
    params = {
        "symbol": symbol,
        "start": start_date,
        "end": end_date,
    }
    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()   # 检查请求是否成功
        return response.json()        # 返回数据(格式视接口而定)
    except Exception as e:
        print(f"请求失败:{e}")
        return None

# 控制频率,别请求太快
data = fetch_data("000001", "2023-01-01", "2023-12-31")
time.sleep(1)   # 每次请求后稍作停顿,善待数据源

注意两个细节:加超时(timeout)防止卡死,加停顿(sleep)控制频率。

四、第三步:解析返回的数据

请求成功后,数据源会返回数据,格式可能是 JSON、CSV 等。你需要把它解析成方便处理的结构——通常是 pandas 的 DataFrame。

代码语言:python
复制
import pandas as pd

def parse_data(raw_data):
    """把原始返回数据解析成 DataFrame"""
    if raw_data is None:
        return None
    # 根据实际返回格式解析(这里假设是记录列表)
    df = pd.DataFrame(raw_data)
    # 确保有日期、开高低收、成交量等关键列
    return df

df = parse_data(data)

解析这一步要根据数据源返回的具体格式来写,核心目标是:把数据整理成规整的表格,包含日期、开高低收、成交量等你需要的字段。

五、第四步:清洗和规范化

拿到的原始数据往往不能直接用,要经过清洗和规范化——这一步用到前面数据清洗篇讲的功夫:

代码语言:python
复制
def clean_data(df):
    if df is None or len(df) == 0:
        return None
    # 转换日期格式并排序
    df["date"] = pd.to_datetime(df["date"])
    df = df.sort_values("date").reset_index(drop=True)
    # 去重
    df = df.drop_duplicates(subset=["date"])
    # 处理缺失
    df = df.dropna(subset=["close"])
    # 确保价格是数值类型
    df["close"] = pd.to_numeric(df["close"], errors="coerce")
    return df

df = clean_data(df)

特别提醒两个坑

一是复权问题。股票数据要注意复权——算长期收益时要用复权价格,否则分红送股会造成虚假的价格跳变。有的数据源可以直接请求复权数据,优先用它。

二是时间对齐。确保日期格式统一、按时间正确排序,为后续计算打好基础。

六、第五步:保存数据

清洗好的数据要保存下来,避免每次都重新抓取。保存方式主要有两种:

保存为文件:小规模数据,存成 CSV 等文件最简单:

代码语言:python
复制
df.to_csv(f"data/{symbol}.csv", index=False)

保存到数据库:数据量大、需要频繁查询时,存到数据库更合适(下一篇会详细讲存储方案)。

对批量抓取多个标的的情况,通常会写个循环,逐个抓取、清洗、保存,并做好频率控制和异常处理:

代码语言:python
复制
symbols = ["000001", "000002", "000003"]
for sym in symbols:
    raw = fetch_data(sym, "2023-01-01", "2023-12-31")
    df = clean_data(parse_data(raw))
    if df is not None:
        df.to_csv(f"data/{sym}.csv", index=False)
    time.sleep(1)   # 每个之间停顿,控制频率

七、抓取流程与注意事项一览

我把流程和关键注意事项整理成一张表:

步骤

做什么

注意事项

选数据源

优先选有接口的合规源

遵守使用条款

发起请求

用 Python 请求数据

加超时、控频率

解析数据

转成 DataFrame

按实际格式解析

清洗规范

去重、缺失、类型

注意复权和时间对齐

保存数据

存文件或数据库

避免重复抓取

八、抓取程序的稳定运行

历史数据抓取通常是"一次性或定期"的任务,但当你需要定期更新数据(比如每天收盘后自动抓取当天最新行情、追加到历史库里),或者要批量抓取大量标的时,就需要一个稳定的运行环境。

用自己的电脑跑定期抓取任务,一旦忘开机、断网,数据就会断档。而量化系统最怕数据断档——数据不连续,回测和实盘都会出问题。所以定期的数据抓取和更新任务,通常会部署到 7×24 小时稳定运行的腾讯云云服务器 CVM 上,配合定时任务,让它自动、稳定地抓取和更新数据,保证数据的连续性和完整性。这也是下一步搭建数据抓取自动化的基础。

结尾

抓取股票、期货历史行情数据,流程上就是"选源、请求、解析、清洗、保存"五步,技术上并不难,难在细节和规范——合规是底线、优先用接口、控制频率、处理好复权和时间对齐。对新手来说,从提供现成接口的免费数据源入手最稳妥。把抓取流程跑通了,你就为量化系统备好了源源不断的"石油"。

定期数据抓取和更新需要稳定的运行环境。腾讯云近期上线了量化交易专题活动,可以了解云服务器如何为数据抓取和定期更新提供 7×24 小时稳定运行支撑。

风险提示:本文仅为量化交易科普与技术分享,不构成任何投资建议。数据抓取须遵守数据源使用条款和相关法规。文中代码仅为教学示例。金融市场存在风险,请结合自身情况谨慎决策。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、抓取前先说三句话
  • 二、第一步:选择合规的数据来源
  • 三、第二步:用 Python 发起请求
  • 四、第三步:解析返回的数据
  • 五、第四步:清洗和规范化
  • 六、第五步:保存数据
  • 七、抓取流程与注意事项一览
  • 八、抓取程序的稳定运行
  • 结尾
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档