欢迎光临
我们一直在努力

AI股票分析师daily_stock_analysis一键部署教程:Python爬虫数据采集实战

AI股票分析师daily_stock_analysis一键部署教程:Python爬虫数据采集实战

你是不是也厌倦了每天手动盯盘,在几十个股票软件和财经新闻网站之间来回切换?想不想拥有一个24小时在线的AI分析师,帮你自动抓取数据、分析行情,还能把分析报告直接推送到你的手机上?

今天,我就带你手把手搭建一个属于自己的AI股票分析系统。这个系统叫daily_stock_analysis,是一个在GitHub上非常火的开源项目。它最大的特点就是“全自动”和“零成本”——利用免费的云端资源和AI大模型,帮你把繁琐的复盘工作自动化。

听起来有点复杂?别担心,这篇教程就是写给新手看的。我会用最直白的话,一步步教你如何在星图GPU平台上把它跑起来,并且重点讲解如何用Python爬虫技术,为这个系统注入“活水”——也就是自动采集股票数据。

整个过程就像搭积木,跟着我做,你也能拥有一个专属的智能投研助理。

1. 准备工作:认识你的AI分析师

在动手之前,我们先花几分钟了解一下我们要部署的这个“家伙”到底能干什么。这样你才知道自己即将拥有一个什么样的工具。

daily_stock_analysis的核心思路很简单:让机器代替人去做那些重复、枯燥的信息收集和初步分析工作。

想象一下,一个专业的股票分析师每天要做什么?他需要:

  • 看行情:查看自选股的股价、涨跌幅、成交量等。
  • 看技术指标:分析K线、均线、MACD等各种图表。
  • 看新闻和舆情:搜索公司相关的利好或利空消息。
  • 综合判断:把所有信息揉在一起,给出一个初步的买卖建议。
  • 这个AI系统干的就是前面三步的“苦力活”,然后把整理好的数据和初步分析交给一个AI大模型(比如Gemini或者DeepSeek),让它生成一份像模像样的“决策仪表盘”。最后,这份报告会通过微信、飞书或者邮件自动发给你。

    它不会替你下决定,但它能把你从海量信息里解放出来,让你只关注最有价值的结论。对于上班族或者没时间盯盘的朋友来说,这简直是神器。

    2. 环境搭建:在星图GPU平台安家

    我们选择在星图GPU平台上部署,主要是图它方便。你不用自己折腾服务器环境,也不用担心家里的电脑关机了程序就停了。星图提供了现成的、带GPU的容器环境,跑AI应用正合适。

    2.1 创建你的工作空间

    首先,你得有一个星图平台的账号。登录之后,找到“创建实例”或者“新建工作空间”的按钮。

    在镜像选择这里,是关键一步。我们不需要从零开始安装Python环境,那样太慢了。你可以直接搜索“Python”或者“PyTorch”这类基础镜像。我推荐选择预装了Python 3.10或Python 3.11,并且带有CUDA支持的镜像,这样后续调用一些需要GPU加速的库会更顺畅。

    实例配置上,对于这个分析系统,CPU和内存不用特别高,起步配置通常就够用。重点是把存储空间给足,建议至少50GB,因为我们要安装不少Python库,后续运行也会产生一些缓存文件。

    点击创建,稍等几分钟,一个属于你的云端开发环境就准备好了。

    2.2 把代码“搬”到云端

    环境有了,接下来要把daily_stock_analysis的代码放进去。这里我们用git命令,这就像是一个代码搬运工。

    打开星图平台提供的终端(通常是Web Terminal或者Jupyter Lab里的Terminal),输入以下命令:

    # 克隆项目代码到你的工作空间
    git clone https://github.com/ZhuLinsen/daily_stock_analysis.git

    # 进入项目文件夹
    cd daily_stock_analysis

    两条命令执行完,项目的所有文件就都下载到你的云端环境里了。你可以用ls命令看看,是不是多了一个daily_stock_analysis的文件夹。

    2.3 安装必需的“零件”

    代码有了,但它还跑不起来,因为它依赖很多其他的Python库,比如网络请求的requests、数据分析的pandas等等。我们需要一次性把这些“零件”都装上。

    项目很贴心地准备了一个requirements.txt文件,里面列出了所有需要的库。我们只需要一条命令:

    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

    这里我加了一个-i参数,指定使用清华大学的镜像源来下载。国内网络访问这个源会快很多,能避免安装过程卡住。

    这个安装过程可能需要几分钟,取决于网速。泡杯茶,耐心等一下。如果中间有某个库安装报错,别慌,通常是网络波动,重新运行一次上面的命令就行。

    3. 核心实战:用Python爬虫抓取股票数据

    好了,基础环境搭好了。现在来到最核心、也是最有意思的部分——数据采集。daily_stock_analysis项目本身支持多种数据源,比如AkShare、Tushare。但我想教你更底层、更通用的方法:自己写爬虫去抓。

    为什么?因为自己写的爬虫最灵活。万一某个数据源接口变了,或者你想抓一些特定网站的数据,自己动手就能搞定。

    3.1 爬虫初体验:抓取单只股票实时行情

    我们从一个最简单的例子开始:从新浪财经抓取某只股票的实时价格。别被“爬虫”这个词吓到,其实就是让程序去访问一个网页,然后把我们需要的信息“抠”出来。

    我们先安装一个专门用来解析网页的库:

    pip install beautifulsoup4 lxml

    然后,创建一个新的Python文件,比如叫stock_spider.py,把下面的代码复制进去:

    import requests
    from bs4 import BeautifulSoup
    import time

    def get_stock_price(stock_code):
    """
    从新浪财经获取A股股票实时价格
    :param stock_code: 股票代码,例如 'sh600519' (上海) 或 'sz000001' (深圳)
    :return: 股票名称和当前价格
    """
    # 构建新浪财经股票页面的URL
    url = f'https://hq.sinajs.cn/list={stock_code}'

    # 设置请求头,模拟浏览器访问
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'https://finance.sina.com.cn'
    }

    try:
    # 发送网络请求
    response = requests.get(url, headers=headers)
    response.encoding = 'gbk' # 新浪财经使用gbk编码

    if response.status_code == 200:
    # 解析返回的数据(格式类似:var hq_str_sh600519="茅台,1850.50,…";)
    data_str = response.text
    # 提取引号内的数据部分
    data_content = data_str.split('"')[1]
    data_list = data_content.split(',')

    if len(data_list) > 1:
    stock_name = data_list[0]
    current_price = data_list[3] # 当前价格通常在第四个位置
    print(f"股票 {stock_name}({stock_code}) 当前价格: {current_price} 元")
    return stock_name, current_price
    else:
    print("解析数据失败")
    return None, None
    else:
    print(f"请求失败,状态码: {response.status_code}")
    return None, None

    except Exception as e:
    print(f"抓取过程中出现错误: {e}")
    return None, None

    # 试试抓取贵州茅台的股价
    if __name__ == "__main__":
    # 贵州茅台在上海证券交易所的代码是 sh600519
    name, price = get_stock_price('sh600519')
    if price:
    print(f"成功获取到 {name} 的价格:{price}")

    运行这个脚本,你就能在终端看到贵州茅台(600519)的实时股价了。这段代码做了几件事:

  • requests.get 去访问新浪财经的一个特定数据接口。
  • BeautifulSoup 虽然这里没直接用上,但它是解析复杂HTML的利器,我们后面会用到。
  • 从返回的一串文本里,按照新浪的格式,把股票名字和价格“切”出来。
  • 这就是爬虫最基本的工作原理:访问 -> 获取 -> 解析。

    3.2 进阶任务:批量抓取你的自选股列表

    只抓一只股票不过瘾,我们通常关注一个股票池。这就需要用到循环和列表了。

    假设你有一个自选股列表,存放在一个文本文件my_stocks.txt里,每行一个代码:

    sh600519
    sz000858
    sz300750

    我们可以写一个函数来批量抓取:

    def batch_get_prices(stock_file='my_stocks.txt'):
    """批量从文件读取股票代码并获取价格"""
    stock_data = []

    try:
    with open(stock_file, 'r', encoding='utf-8') as f:
    stock_codes = [line.strip() for line in f if line.strip()]

    print(f"开始批量获取 {len(stock_codes)} 只股票数据…")

    for code in stock_codes:
    name, price = get_stock_price(code)
    if name and price:
    stock_data.append({
    'code': code,
    'name': name,
    'price': price
    })
    # 礼貌一点,每次请求间隔1秒,避免把别人服务器搞崩
    time.sleep(1)

    print("\\n=== 自选股行情汇总 ===")
    for item in stock_data:
    print(f"{item['name']}({item['code']}): {item['price']}")

    return stock_data

    except FileNotFoundError:
    print(f"文件 {stock_file} 不存在")
    return []

    # 运行批量抓取
    if __name__ == "__main__":
    my_portfolio = batch_get_prices()

    这样,你只需要维护好那个my_stocks.txt文件,运行一次脚本,整个股票池的行情就一目了然了。

    3.3 让数据“活”起来:定时自动运行

    手动运行脚本还是麻烦。既然是AI分析师,就得让它自动化。在Linux环境下,最常用的定时任务工具是crontab。

    在终端里输入 crontab -e,会打开一个编辑器。在里面添加一行:

    # 每天上午9点30分(开盘后)和下午3点(收盘后)各运行一次爬虫脚本
    30 9 * * 1-5 /usr/bin/python3 /你的路径/stock_spider.py >> /你的路径/stock.log 2>&1
    0 15 * * 1-5 /usr/bin/python3 /你的路径/stock_spider.py >> /你的路径/stock.log 2>&1

    这行命令的意思是:每周一到周五(1-5)的9点30分和15点整,自动执行我们的Python脚本,并且把运行日志追加到stock.log文件里。

    这样一来,你的爬虫就成了一个不知疲倦的小助手,每天准时帮你采集数据。

    4. 数据清洗与整合:喂给AI“干净”的粮食

    爬虫抓回来的数据往往是原始的、杂乱的。直接丢给AI,它可能“吃坏肚子”。所以我们需要做一步“数据清洗”,把数据整理成AI容易理解的格式。

    4.1 清洗数据:处理异常和缺失

    爬虫过程中可能会遇到网络错误、页面改版等问题,导致抓回来的数据是空的或者格式不对。我们需要在代码里增加一些“容错”处理。

    改进一下之前的get_stock_price函数:

    def get_stock_price_enhanced(stock_code):
    url = f'https://hq.sinajs.cn/list={stock_code}'
    headers = {'User-Agent': 'Mozilla/5.0 …'}

    try:
    response = requests.get(url, headers=headers, timeout=10) # 设置10秒超时
    response.encoding = 'gbk'

    if response.status_code != 200:
    print(f"警告:请求{stock_code}失败,状态码{response.status_code}")
    # 这里可以尝试重试,或者记录到错误日志
    return None, None, None # 多返回一个状态

    data_str = response.text
    if 'hq_str' not in data_str:
    print(f"警告:{stock_code}返回的数据格式异常")
    return None, None, '格式错误'

    # … 原有的解析逻辑 …

    # 假设我们成功解析出了价格
    price_float = float(current_price)

    # 数据合理性校验:股价通常不会低于0.01元或高于10万元
    if price_float < 0.01 or price_float > 100000:
    print(f"警告:{stock_code}价格{price_float}异常,可能数据有误")
    return stock_name, current_price, '价格异常'

    return stock_name, current_price, '成功'

    except requests.exceptions.Timeout:
    print(f"错误:获取{stock_code}超时")
    return None, None, '超时'
    except ValueError as e:
    print(f"错误:解析{stock_code}价格时出错: {e}")
    return None, None, '解析错误'
    except Exception as e:
    print(f"未知错误:{e}")
    return None, None, '未知错误'

    你看,我们增加了超时控制、数据格式校验、数值合理性判断,并且对不同类型的错误进行了分类。这样,即使某个股票数据抓取失败,也不会影响整个程序,我们还能知道失败的原因是什么。

    4.2 整合数据:生成AI喜欢的格式

    daily_stock_analysis项目内部有它自己约定的数据格式。我们的爬虫抓取到数据后,最好能转换成项目能直接使用的格式,比如一个JSON文件或者直接写入数据库。

    假设项目需要一个stock_data.json文件,格式如下:

    [
    {
    "symbol": "600519.SH",
    "name": "贵州茅台",
    "current_price": 1850.50,
    "change": "0.85%",
    "update_time": "2024-01-01 15:00:00"
    }
    ]

    那我们可以在批量抓取函数最后,加上数据保存的逻辑:

    import json
    from datetime import datetime

    def save_to_json(data_list, filename='stock_data.json'):
    """将股票数据保存为JSON格式"""
    output_data = []
    for item in data_list:
    output_data.append({
    "symbol": item['code'].replace('sh', '').replace('sz', '') + '.SH' if 'sh' in item['code'] else '.SZ',
    "name": item['name'],
    "current_price": float(item['price']),
    "update_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    })

    with open(filename, 'w', encoding='utf-8') as f:
    json.dump(output_data, f, ensure_ascii=False, indent=2)

    print(f"数据已保存至 {filename}")

    保存成JSON的好处是,结构清晰,很多编程语言都能方便地读取。daily_stock_analysis的主程序就可以直接加载这个文件,获取最新的股票数据。

    5. 连接与测试:让你的爬虫为AI服务

    数据有了,环境也有了,最后一步就是把它们串联起来,让daily_stock_analysis系统能用上我们爬取的数据。

    5.1 配置AI分析系统

    回到daily_stock_analysis项目目录,我们需要进行一些配置。最简单的方式是复制环境变量模板文件:

    cp .env.example .env

    然后用文本编辑器打开.env文件,你会看到很多配置项。最关键的是这几行:

    # 1. 设置你的自选股列表 (用逗号分隔)
    STOCK_LIST=600519,000858,300750

    # 2. 设置AI模型 (二选一)
    # 如果你有Google Gemini的API Key(免费申请)
    GEMINI_API_KEY=your_gemini_api_key_here

    # 或者,如果你用DeepSeek、通义千问等兼容OpenAI的模型
    OPENAI_API_KEY=your_openai_api_key
    OPENAI_BASE_URL=https://api.deepseek.com/v1
    OPENAI_MODEL=deepseek-chat

    # 3. 设置通知方式 (比如企业微信)
    WECHAT_WEBHOOK_URL=your_wechat_webhook_url

    把STOCK_LIST改成你自己的股票代码。然后去申请一个AI模型的API Key(Gemini免费,DeepSeek也便宜)。最后,如果你希望每天收到推送,就去配置一个企业微信或飞书的机器人,把Webhook地址填进来。

    5.2 修改数据源指向我们的爬虫

    默认情况下,daily_stock_analysis使用AkShare等库获取数据。为了让它使用我们爬虫抓取的数据,我们需要做一点小小的“嫁接”。

    找到项目里获取股票行情的代码文件(通常在data_provider或sources目录下)。我们不需要改动核心逻辑,只需在合适的位置,添加一个从我们本地JSON文件读取数据的函数,并让它优先使用我们的数据。

    例如,创建一个新文件custom_data_loader.py:

    import json
    import os
    from datetime import datetime, timedelta

    def load_custom_stock_data(json_file='stock_data.json'):
    """从本地JSON文件加载爬虫获取的股票数据"""
    if not os.path.exists(json_file):
    print(f"自定义数据文件 {json_file} 不存在,将使用默认数据源。")
    return None

    try:
    with open(json_file, 'r', encoding='utf-8') as f:
    data = json.load(f)

    # 检查数据是否新鲜(比如是今天的数据)
    if data:
    latest_time = data[0].get('update_time')
    # 这里可以添加时间有效性校验逻辑
    # …
    print(f"成功从自定义文件加载 {len(data)} 条股票数据。")
    return data
    else:
    return None
    except Exception as e:
    print(f"加载自定义数据失败: {e}")
    return None

    # 然后,在项目主逻辑中,可以这样调用:
    # custom_data = load_custom_stock_data()
    # if custom_data:
    # # 使用自定义数据
    # process_data(custom_data)
    # else:
    # # 回退到默认数据源
    # default_data = get_default_data()

    这样,当我们的爬虫定时运行并更新了stock_data.json文件后,AI分析系统在运行时就会优先采用这份更新鲜、更定制化的数据。

    5.3 运行与验收

    所有配置都搞定后,在项目根目录下运行:

    python main.py

    如果一切顺利,你会看到程序开始运行,获取数据、调用AI分析、生成报告。稍等片刻,如果你配置了通知,你的手机就会“叮”的一声,收到一份像下面这样的AI分析报告:

    [AI决策仪表盘]
    🟢 买入 | 贵州茅台(600519)
    缩量回踩MA5支撑,乖离率1.2%处于最佳买点
    💰 建议: 买入1800 | 止损1750 | 目标1900
    多头排列 乖离安全 量能配合

    生成时间: 18:00

    恭喜你!到这里,一个集成了自动数据采集(Python爬虫)和智能分析(AI大模型)的股票分析系统,就完全在你的掌控之中了。

    整个过程从无到有,我们经历了环境部署、爬虫编写、数据清洗、系统集成。最棒的是,它完全在你的私有环境里运行,数据经过你的手,分析逻辑由你定制。

    回过头看,技术并没有想象中那么高深。它就是一系列自动化步骤的组合:定时抓取、清洗整理、交给AI总结、推送结果。你每天需要做的,就是花一分钟看看手机上的推送报告,把省下来的几个小时,用在更深入的思考和决策上。

    这个系统就像一个不知疲倦的初级研究员,帮你完成了信息收集和整理的工作。但它终究是个工具,最后的投资决策,还需要你结合自己的经验和判断。用它来提高效率、辅助决策,而不是完全依赖它,这才是技术的正确打开方式。


    获取更多AI镜像

    想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

    赞(0)
    未经允许不得转载:171主机测评 » AI股票分析师daily_stock_analysis一键部署教程:Python爬虫数据采集实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址