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

Flutter for OpenHarmony:Flutter 三方库 dart_openai — 激发鸿蒙应用的 AIGC (AI 大模型/ChatGPT、Deepseek等) 无限创意(适配鸿蒙

Flutter for OpenHarmony:Flutter 三方库 dart_openai — 激发鸿蒙应用的 AIGC (AI 大模型/ChatGPT、Deepseek等) 无限创意(适配鸿蒙

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter for OpenHarmony:Flutter 三方库 dart_openai — 激发鸿蒙应用的 AIGC (AI 大模型/ChatGPT、Deepseek等) 无限创意(适配鸿蒙 HarmonyOS Next ohos) 前言 随着生成式 AI(AIGC)浪潮席卷全球,将大语言模型(LLM)的智慧集成到移动应用中已成为大势所趋。无论是智能对话、代码生成,还是图像创作,AI 正在重塑我们的交互方式。 在 Flutter for OpenHarmony 开发中,我们如何让鸿蒙应用直接对话全球顶尖的 AI 模型?dart_openai 库通过对 OpenAI API 的完美封装,

实测 Copilot 2025 终极版:5 大颠覆性功能 + 10 段实战代码,开发效率直接翻 3 倍!

实测 Copilot 2025 终极版:5 大颠覆性功能 + 10 段实战代码,开发效率直接翻 3 倍!

目录 编辑 前言:从 "代码补全工具" 到 "全能开发搭档" 的蜕变 一、基础能力大跃进:编码体验的全方位升级 1. 多模型自由切换:给不同任务配 "专属 AI 大脑" 实战场景与代码示例 2. 智能补全 2.0:懂项目风格的 "代码生成器" 实战场景与代码示例 3. 多语言支持增强:从前端到运维全覆盖 跨语言实战案例 二、革命性功能:Agent 智能体与多模态能力 1. Agent 模式:能自己动手的 "开发助理" 实战场景:自动化部署

什么是Agentic AI?Agentic AI 与传统 AIGC 有什么区别?

什么是Agentic AI?Agentic AI 与传统 AIGC 有什么区别?

什么是 Agentic AI?Agentic AI 与传统 AIGC 有什么区别? 1. 引言 近年来,人工智能(AI)技术飞速发展,其中以生成式 AI(AIGC,Artificial Intelligence Generated Content)和 Agentic AI(智能代理 AI)最为热门。AIGC 通过深度学习模型生成文本、图像、视频等内容,而 Agentic AI 则更进一步,能够自主感知、决策并执行任务。那么,Agentic AI 究竟是什么?它与传统的 AIGC 有何不同?在本文中,我们将深入探讨 Agentic AI 的概念、技术原理、

CosyVoice环境安装报错:安装openai-whisper时出现ModuleNotFoundError: No module named ‘pkg_resources‘的原因

先说如何解决,我个人采用源码安装,安装时禁用构建隔离: git clone https://github.com/openai/whisper.git cd whisper git checkout v20231117 pip install -e . --no-build-isolation 再说该问题产生的原因,下面是大D老师的回答,自行参考。 太棒了!你找到了正确的解决方案。让我详细解释为什么会出现这个问题,以及为什么 --no-build-isolation 能解决它。 🔍 问题根源分析 问题的关键在于 PEP 517/518 构建隔离机制和你的 setup.py 实现方式。 1. 构建隔离机制 (Build Isolation) 的工作原理 当你执行 pip install -e .(不带 --no-build-isolation)时,