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 员工:OpenClaw 本地部署教程(含环境配置 + 插件开发 + 常见坑)

旧电脑秒变 AI 员工:OpenClaw 本地部署教程(含环境配置 + 插件开发 + 常见坑)

前言 本文基于最新OpenClaw版本编写,适配电脑低配置场景(最低2vCPU+2GiB内存+40GiB SSD),兼容Windows 10/11(优先WSL2)、Ubuntu 20.04+系统,全程纯操作指令,覆盖环境配置、本地部署、插件开发、高频坑排查。核心解决部署卡顿、国内网络适配、插件开发无思路、报错无法排查四大痛点,全程适配国内网络(国内镜像源)、国内大模型(通义千问、阿里云百炼等),无需海外代理,可稳定运行实现自动化办公(文件处理、IM对接、任务调度等)。 一、前置准备(适配优化) 1.1 硬件要求(最低适配) * CPU:Intel i3 4代+/AMD Ryzen 3 2000+(支持虚拟化,

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

目录 一、前言 二、AI编程工具介绍 2.1 什么是AI编程 2.1 AI编程核心功能 2.3 AI编程应用场景 1. 智能代码补全与生成 2. 自然语言生成代码 3. 代码解释与文档生成 4. 错误检测与自动修复 5. 单元测试与自动化测试生成 6. 代码重构与优化 7. 跨语言代码转换 8. 低代码/无代码平台增强 三、几种主流AI编程工具介绍 3.1 Cursor 3.1.1 Cursor 核心功能 3.1.1 Cursor 优势 3.2 GitHub Copilot

我用6个AI测了一圈,谁是国产Agent第一名,答案出奇地一致

我做了一个有点无聊但结果挺有意思的实验:用6个主流 AI,问同一个问题——“国产 AI Agent 谁最强,给我排个前三”。 结果出奇地整齐。 先问海外的 为了避免"自家夸自家"的嫌疑,先从理论上没有利益关系的海外模型问起。 ChatGPT 的答案是:百度、腾讯、阿里。 Gemini 给了略微不同的排法:百度、阿里、字节——但百度还是第一。 Gemini 在回答里用了"基建狂魔"来描述百度,说百度在芯片、云、模型、应用层都有自己的布局。这个词没什么水分,讲的是一件具体的事。 再问国内的 国内四家的结论更集中。 DeepSeek:百度、腾讯、阿里。 文心:百度、腾讯、阿里—

OpenClaw 全攻略:从入门到精通的 AI 智能体部署指南

OpenClaw 全攻略:从入门到精通的 AI 智能体部署指南

第一部分:认知篇 —— 什么是 OpenClaw? 1.1 定义与定位 OpenClaw(原名 Clawdbot / Moltbot)是一个本地优先、隐私至上、多渠道集成的自托管 AI 助手平台。它标志着人工智能从“对话式交互”迈入“自主行动”的第三阶段。 通俗理解: 传统 AI(如网页版 ChatGPT):你问一句,它答一句,像个顾问。 OpenClaw:你给它一个目标(如“帮我整理本月财报并发送给团队”),它能自己规划步骤、搜索数据、处理文件、发送邮件,像个员工。 1.2 核心架构:App、Gateway 与 CLI 要玩转 OpenClaw,必须理解它的三个核心组件: Gateway(网关)