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+地图赛道来了,带你读懂选题方向、投稿要求与拿分思路

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 文章目录 * 在这里插入图片描述 1. 【腾讯位置服务开发者征文大赛】AI+地图赛道来了,一文读懂选题方向、投稿要求与拿分思路 * 在这里插入图片描述 2. 为什么我觉得这场比赛值得认真参加 * 在这里插入图片描述 3. 这次征文,最值得写的方向有哪些 * 3.1 对话式地图交互 * 3.2 智能行程与多人出行规划 * 3.3 商业选址与区域潜力分析 * 3.4 AI 辅助地图开发 * 在这里插入图片描述 4. 想拿高分,文章一定要这么写 * 4.

什么是人工智能?AI、机器学习、深度学习的关系

什么是人工智能?AI、机器学习、深度学习的关系

文章目录 * 什么是人工智能 * 人工智能的定义 * 人工智能的分类 * 什么是机器学习 * 机器学习的基本概念 * 机器学习的工作流程 * 机器学习的主要类型 * 什么是深度学习 * 深度学习的基本概念 * 深度学习的优势 * 深度学习的应用领域 * AI、机器学习、深度学习的关系 * 三者的层次关系 * 三者的发展历程 * 如何选择合适的方法 * 实际应用案例分析 * 案例一:垃圾邮件过滤 * 案例二:图像识别 * 案例三:推荐系统 * 学习路径建议 * 第一阶段:打好基础 * 第二阶段:深入学习 * 第三阶段:实战提升 * 总结 本篇文章将带你深入理解人工智能的核心概念,厘清AI、机器学习、深度学习之间的关系,为后续的学习打下坚实的基础。 什么是人工智能 人工智能的定义 人工智能,英文名称为Artificial Intelligence,简称AI,这个概念最早由约翰·麦卡锡在1956年的达特茅斯会议上提出。那么什么是人工智能呢?简单来说,人工智能就

OpenClaw视觉操作实战:不写接口,让AI直接点按钮、操作软件

OpenClaw视觉操作实战:不写接口,让AI直接点按钮、操作软件

文章目录 * 前言 * 一、OpenClaw是啥?你的数字长工 * 二、视觉操作的核心:Snapshot快照系统 * 1. 告别元素定位地狱 * 2. 自适应界面变化 * 3. 跨应用操作 * 三、实战:手把手教你让AI自动填表 * 步骤1:安装与环境准备 * 步骤2:启动视觉模式 * 步骤3:编写自动化脚本 * 步骤4:进阶:自动下载报表 * 四、不止浏览器:桌面软件也能点 * 五、定时任务:让AI自己起床干活 * 六、数据安全:你的隐私留在本地 * 七、避坑指南:新手常踩的雷 * 1. 动态加载的坑 * 2. 弹窗处理 * 3. API额度控制 * 4. 元素编号会变 * 八、总结:从“码农”

从高原到云端:一个青海少年的AI农业创业之路

从高原到云端:一个青海少年的AI农业创业之路

“我曾翻越二十公里山路去上学,如今,我的代码正飞越万亩农田。”   一、高原的孩子,心里装着整个世界   我出生在青海的一座山村。村子不通公交,家到镇上中学要走两个多小时——二十余公里的崎岖山路,雨天泥泞,冬天结冰。书包里除了课本,还有母亲塞进去的馍馍和咸菜。   但山再高,也挡不住一颗想看世界的心。   从小,我痴迷历史与文学。《史记》里那些金戈铁马的故事,《红楼梦》中细腻入微的人情冷暖,让我在煤油灯下读到深夜。我内心敏感,常因一片云影掠过麦田、一声鹰啸划破长空而思绪万千。那时的我,以为人生只有两条路:要么走出高原,要么被高原埋没。     直到村里通了网。   那一年,我15岁。第一次用手机连上4G信号,点开一个叫“Python教程”的视频,从此命运悄然转向。   二、代码,是我翻山越岭的新脚力   高中三年,我白天上课,晚上自学编程。没有电脑,就用二手安卓机敲代码;没有老师,就靠B站、GitHub和Stack Overflow。