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的核心思路很简单:让机器代替人去做那些重复、枯燥的信息收集和初步分析工作

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

  1. 看行情:查看自选股的股价、涨跌幅、成交量等。
  2. 看技术指标:分析K线、均线、MACD等各种图表。
  3. 看新闻和舆情:搜索公司相关的利好或利空消息。
  4. 综合判断:把所有信息揉在一起,给出一个初步的买卖建议。

这个AI系统干的就是前面三步的“苦力活”,然后把整理好的数据和初步分析交给一个AI大模型(比如Gemini或者DeepSeek),让它生成一份像模像样的“决策仪表盘”。最后,这份报告会通过微信、飞书或者邮件自动发给你。

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

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

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

2.1 创建你的工作空间

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

在镜像选择这里,是关键一步。我们不需要从零开始安装Python环境,那样太慢了。你可以直接搜索“Python”或者“PyTorch”这类基础镜像。我推荐选择预装了Python 3.10Python 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)的实时股价了。这段代码做了几件事:

  1. requests.get 去访问新浪财经的一个特定数据接口。
  2. BeautifulSoup 虽然这里没直接用上,但它是解析复杂HTML的利器,我们后面会用到。
  3. 从返回的一串文本里,按照新浪的格式,把股票名字和价格“切”出来。

这就是爬虫最基本的工作原理:访问 -> 获取 -> 解析

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_providersources目录下)。我们不需要改动核心逻辑,只需在合适的位置,添加一个从我们本地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镜像和应用场景?访问 ZEEKLOG星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Read more

多模态 AI 应用:图文音视频一体化开发实战教程

多模态 AI 应用:图文音视频一体化开发实战教程

什么是多模态AI 多模态AI是指能够同时处理文本、图像、音频、视频等多种不同类型数据的人工智能系统,它打破了单模态AI的信息壁垒,能更贴近人类理解世界的方式。比如我们日常使用的AI聊天机器人识图功能、视频自动字幕生成工具,都是多模态AI的典型应用。 开发前的核心准备 模型选型建议 模型类型推荐模型适用场景开源轻量模型Qwen-VL-Chat、MiniGPT-4本地部署、快速验证云端API模型GPT-4V、Gemini Pro生产级应用、复杂任务处理专业领域模型CLIP、Whisper图像检索、音频转写等细分场景 环境依赖安装 我们将基于Python生态实现实战项目,需要安装以下核心库: # 基础依赖 pip install torch torchvision transformers pillow # 音频处理依赖 pip install librosa soundfile # 视频处理依赖 pip install opencv-python moviepy # API调用依赖(可选,用于调用云端多模态模型) pip install openai anthropic

A / B测试太慢?AI帮你实时优化实验策略

A / B测试太慢?AI帮你实时优化实验策略

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕AI这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * A/B测试太慢?AI帮你实时优化实验策略 🚀 * 为什么传统A/B测试成了效率黑洞? * AI驱动的实时优化:从“被动等待”到“主动决策” * 贝叶斯优化:AI决策的数学引擎 * 代理模型:预测点击率 * 采集函数:决定下一步策略 * 代码实战:用Python实现AI优化A/B测试 * 代码执行结果示例 * 实时决策流程:AI如何动态调整实验? * 实际业务场景:电商大促的AI优化案例 * 贝叶斯优化 vs 其他AI方法 * 如何在你的系统中落地AI优化? * 步骤1:构建基础数据层 * 步骤2:集成AI优化引擎 * 步骤3:设置停止条件 * 为什么AI优化能避免“实验陷阱”?

ToDesk 全新 ToClaw,正在把电脑交给AI去操作

ToDesk 全新 ToClaw,正在把电脑交给AI去操作

这两年,AI 工具层出不穷,但大多数产品还停留在“能回答、会生成”的阶段:帮你写一段话、搜一份资料、整理一个思路,真正到了执行层,还是得你自己坐回电脑前,一个软件一个软件地点、一项任务一项任务地做。 这也是很多人对 AI 的真实感受——它会说,但不一定真能干活。而 ToDesk 新上线的 ToClaw,想解决的正是这个问题。 一、ToClaw 是什么? ToClaw 是一款基于 OpenClaw 深度定制、并与远程控制运行时深度结合的 AI 助手。它最大的不同,不只是“懂你说什么”,而是能直接在你的电脑上执行操作。 你只需要一句话,它就可以在电脑端完成对应动作:打开软件、点击按钮、填写表单、拖拽文件、整理资料、生成表格、汇总信息……很多原本需要人守在电脑前操作的工作,现在都可以交给 ToClaw

AI辅助,两天实现一个IM系统?

AI辅助,两天实现一个IM系统?

前言         最近写项目的时候,有个项目中需要实现聊天系统 ,所以打算周末两天借助AI辅助进行开发,此篇文章说一下自己使用AI辅助开发的一些心得;其中会把完整的使用过程介绍一下。 后端:Claude Code 前端:Gemini 一、 架构设计         在设计 IM 系统时,要明确自己的核心目标,我们的核心目标是:实时性、可靠性、可扩展性。         在架构设计的时候其实我也请教了一下AI,有一说一都挺不错的,以下是统一话术各个AI的个人使用总结: 1.GPT 设计的比较完善清晰但是具体细节略少,整体来说还是挺靠谱的; 2.deepseek 说实话deepseek也挺好,虽然但是,我要的是整体架构设计它却给我实现一个demo(同一话术),也是笑不活了,请看VCR 反正就是前后端代码都帮你实现了,表也贴心的帮你实现了虽然不能直接用,哈哈哈;有一说一确实挺难绷的 3.Gemini         说实话,gemini确实有点东西,整体架构设计和技术上都挺好的,而且还会根据需求分析阶段性开发。 后面也试了其他AI我就不一一说明了。。。。。