Update Rust version: fix console window, add API test, update README

This commit is contained in:
2026-04-07 17:27:38 +08:00
parent e065c41d6b
commit 3ae0eaa9c1
7 changed files with 612 additions and 212 deletions

216
README.md
View File

@@ -1,6 +1,6 @@
# 股吧人气指示器 (Guba Sentiment Indicator)
一个基于 Python + PySide6 的桌面悬浮小工具,专为股票投资者设计,通过爬取股吧或论坛评论,使用大语言模型分析投资者情绪倾向,并以直观的可视化方式展示市场人气冷暖程度。
一个基于 **Rust + eframe** 的桌面悬浮小工具,专为股票投资者设计,通过爬取股吧或论坛评论,使用大语言模型分析投资者情绪倾向,并以直观的可视化方式展示市场人气冷暖程度。
## 主要功能
@@ -8,14 +8,14 @@
- **自定义爬取规则**: 支持通过XPath表达式自定义爬取目标可灵活配置目标URL和内容选择器
- **智能去重机制**: 使用内容哈希算法自动识别和过滤重复评论,避免重复分析
- **自适应刷新**: 根据爬取结果动态调整刷新频率,无新内容时自动延长刷新间隔
- **多重解析策略**: 采用 lxml + BeautifulSoup 双重解析机制,提高爬取成功率
- **多重解析策略**: 采用正则表达式多重解析机制,提高爬取成功率
- **用户代理配置**: 支持自定义User-Agent增强反爬虫适应性
### 2. 大语言模型情感分析
- **多模型支持**: 支持OpenAI兼容API包括NVIDIA API等主流大模型平台
- **精准情感评分**: 为每条评论生成0-100分的情感倾向评分0为极度悲观100为极度乐观
- **智能标签生成**: 自动为分析结果生成情感标签(极度悲观、悲观、中立、乐观、极度乐观等)
- **重试机制**: 集成API调用重试机制应对网络波动和API限流
- **API测试功能**: 配置界面提供API连接测试确保配置正确
- **分析历史记录**: 完整保存每次分析的结果和时间戳
### 3. 可视化情感指示器
@@ -27,24 +27,23 @@
- **精确数值显示**: 实时显示当前平均情感分数和整体情绪标签
- **发光特效**: 采用发光效果增强视觉体验
### 4. 上证所网页截图功能
- **自动化截图**: 使用Playwright自动取上证所网页指定区域
- **元素定位**: 通过XPath精确定位图表元素进行截图
- **定时更新**: 每5分钟自动更新一次截图
- **历史管理**: 自动管理截图文件,保留最新记录
### 4. 股票数据可视化
- **上证指数实时数据**: 自动取上证指数数据并绘制波形图
- **历史数据追踪**: 保留最近100个数据点展示价格变化趋势
- **图表自动更新**: 与评论分析同步更新
### 5. 桌面客户端界面
- **悬浮窗口**: 无边框设计,支持窗口拖拽和置顶显示
- **系统托盘**: 集成系统托盘功能,支持最小化到托盘
- **透明度调节**: 支持0.3-1.0范围内的透明度调节
- **悬浮窗口**: 现代化无边框设计,支持窗口拖拽和置顶显示
- **白色主题**: 简洁美观的白色主题界面,提高可读性
- **中文字体支持**: 自动加载系统中文字体,确保界面显示正常
- **配置对话框**: 图形化配置界面,支持实时修改各项参数
- **状态显示**: 实时显示当前运行状态和处理进度
### 6. 数据管理与持久化
- **SQLite数据库**: 使用SQLite存储所有评论、分析结果和历史数据
- **结构化存储**: 评论表、分析历史表、配置表分离存储
- **结构化存储**: 评论表、分析历史表分离存储
- **数据统计**: 实时统计爬取次数、分析次数等运行指标
- **自动清理**: 支持历史数据管理和自动清理
- **自动清理**: 支持历史数据管理
### 7. 高级配置选项
- **API配置**: 支持自定义API Base URL、API Key、模型选择和超时设置
@@ -54,51 +53,53 @@
## 技术栈
### 核心技术
### Rust版本当前版本
- **Rust 1.70+**: 主要开发语言
- **eframe/egui**: 现代化跨平台GUI框架
- **SQLite**: 本地数据存储通过rusqlite
- **reqwest**: HTTP请求处理
- **serde**: 序列化/反序列化
- **tokio**: 异步运行时
- **regex**: 正则表达式解析
- **chrono**: 时间处理
- **parking_lot**: 线程安全锁
### Python版本旧版本
- **Python 3.10+**: 主要开发语言
- **PySide6**: 桌面GUI界面开发
- **SQLite**: 本地数据存储
- **Requests**: HTTP请求处理
- **LXML**: HTML解析和XPath支持
- **BeautifulSoup4**: 备选HTML解析器
- **Selenium**: Web自动化备用方案
- **Playwright**: 高级网页自动化和截图
### AI技术
- **OpenAI API**: 大语言模型接口
- **JSON解析**: 结构化响应处理
- **情感分析算法**: 0-100分评分系统
### 开发工具
- **Loguru**: 高级日志管理
- **Playwright**: 自动化浏览器控制
- **PyInstaller**: 应用程序打包通过build.spec
## 安装与配置
### 环境要求
- Python 3.10 或更高版本
- Windows/macOS/Linux 操作系统
### 环境要求Rust版本
- **Windows 10/11**: 64位系统
- **MSYS2 + MinGW**: 用于编译Rust代码
- **Rust 1.70+**: 安装rustup后自动管理
### 安装步骤
### 安装步骤Rust版本
1. **克隆或下载项目**
```bash
git clone <repository-url>
git clone http://124.223.26.33:3000/xiaji/guba-indicator.git
cd guba
```
2. **安装Python依赖**
2. **编译项目**
```bash
pip install -r requirements.txt
# 进入rust目录
cd rust
# 编译release版本无控制台窗口
cargo build --release
# 生成的可执行文件在 target/release/guba.exe
```
3. **安装Playwright浏览器驱动**
```bash
playwright install chromium
```
4. **配置API密钥**
3. **配置API密钥**
编辑 `config.json` 文件填入您的大语言模型API配置
```json
{
@@ -111,7 +112,7 @@ playwright install chromium
}
```
5. **配置爬取参数**
4. **配置爬取参数**
在配置中设置目标URL和XPath表达式
```json
{
@@ -124,9 +125,9 @@ playwright install chromium
```
### 运行程序
```bash
python main.py
```
- **直接运行**: 双击 `guba-rust.exe` 文件
- **无控制台窗口**: 程序以GUI模式运行不会显示命令行窗口
- **图标支持**: 程序使用 `guba.ico` 作为应用图标
## 配置详解
@@ -135,15 +136,12 @@ python main.py
- `api_key`: API访问密钥
- `model`: 使用的模型名称
- `timeout`: API请求超时时间
- `retry_times`: API调用失败时的重试次数
### 爬虫配置
- `target_url`: 目标网站URL
- `xpath`: 用于提取评论的XPath表达式
- `user_agent`: HTTP请求的User-Agent字符串
- `fetch_interval`: 爬取间隔时间(秒)
- `retry_times`: 爬取失败重试次数
- `retry_interval`: 爬取重试间隔(秒)
### UI配置
- `opacity`: 窗口透明度0.3-1.0
@@ -155,48 +153,48 @@ python main.py
### 数据库配置
- `path`: SQLite数据库文件路径
### 日志配置
- `level`: 日志级别INFO/DEBUG/ERROR等
- `path`: 日志文件路径
## 使用说明
### 基本操作
1. 启动程序后,主界面将显示情感指示器
2. 程序自动开始爬取评论并分析情感
3. 指示器颜色和数值实时反映市场情绪
4. 波形图显示股票价格走势
4. 波形图显示上证指数走势
### 按钮功能
- **开始/停止**: 控制爬取和分析过程
- **刷新**: 手动触发一次评论爬取和分析
- **配置**: 打开配置对话框修改各项参数
- **退出**: 关闭应用程序
### 系统托盘菜单
- **显示**: 显示主窗口
- **隐藏**: 隐藏到系统托盘
- **退出**: 完全退出程序
### 配置界面
- **API配置**: 设置大语言模型API参数包含测试按钮验证配置
- **爬虫配置**: 设置目标网站和爬取参数
- **阈值设置**: 调整情感分析的阈值
- **界面设置**: 调整窗口透明度和置顶状态
## 高级功能
### 批量分析模式
支持一次性分析多条评论,适用于历史数据分析场景。
### API测试功能
在配置界面中点击"测试API"按钮,程序会:
- 检查API连接是否正常
- 验证API Key是否有效
- 获取并显示可用的模型列表
- 显示测试结果和状态
### 实时数据统计
程序会统计以下运行指标:
- 爬取网站次数
- 提交API分析次数
- 评论总数和已分析数
- 平均情感分数趋势
### 自定义情感标签
系统根据以下规则自动分类情感:
- 0-30分: 极度悲观
- 0-29分: 极度悲观
- 30-39分: 悲观
- 39-45分: 偏悲观
- 40-44分: 偏悲观
- 45-55分: 中立
- 55-65分: 偏乐观
- 65-70分: 乐观
- 56-64分: 偏乐观
- 65-69分: 乐观
- 70-100分: 极度乐观
## 故障排除
@@ -214,47 +212,67 @@ python main.py
- 查看网络连接和防火墙设置
3. **界面显示异常**
- 检查PySide6是否正确安装
- 检查系统中是否安装了中文字体
- 尝试调整透明度设置
### 日志文件
运行日志保存在 `guba.log` 文件中,记录所有操作和错误信息
### 统计信息
程序退出时会生成运行统计信息,保存在 `statistics.txt` 文件中。
## 打包发布
项目使用PyInstaller将应用打包为独立可执行文件
### 打包命令
运行日志输出到控制台,可通过命令行启动查看详细信息
```bash
# 安装PyInstaller
pip install pyinstaller
# 打包应用生成单个exe文件
pyinstaller --onefile --noconsole --icon=guba.ico --distpath=. --hidden-import=PySide6.Qt6Compat --exclude-module PyQt5 --exclude-module PyQt6 main.py
# 查看日志
.uba-rust.exe > log.txt 2>&1
```
### 打包参数说明
- `--onefile`: 打包成单个exe文件
- `--noconsole`: 不显示控制台窗口
- `--icon=guba.ico`: 使用guba.ico作为程序图标
- `--distpath=.`: 在当前目录生成exe文件
- `--hidden-import=PySide6.Qt6Compat`: 显式导入PySide6兼容模块
- `--exclude-module PyQt5 --exclude-module PyQt6`: 排除其他Qt绑定避免冲突
## 项目结构
### 清理打包残留
打包完成后可运行清理脚本删除build和dist文件夹
```bash
python .trae/skills/pyinstaller-one/clean.py
```
### Rust版本
- `rust/src/main.rs`: 主程序入口
- `rust/src/config.rs`: 配置管理
- `rust/src/database.rs`: 数据库操作
- `rust/src/spider.rs`: 网页爬取
- `rust/src/analyzer.rs`: 情感分析
- `rust/src/ui.rs`: 界面组件
- `rust/Cargo.toml`: 项目依赖配置
- `rust/build.rs`: Windows资源配置
### 打包日志
打包命令已保存在 `package.log` 文件中,方便后续查阅和重复使用。
### Python版本保留
- `main.py`: 主程序入口
- `main_window.py`: GUI界面
- `config_manager.py`: 配置管理
- `database.py`: 数据库操作
- `spider.py`: 网页爬取
- `llm_analyzer.py`: 情感分析
- `waveform_widget.py`: 波形图绘制
### 执行文件
打包完成后,`main.exe` 文件将在当前目录生成可直接运行无需安装Python环境。
## 编译说明
### MSYS2 + MinGW编译
项目使用MSYS2的MinGW工具链编译
1. **安装MSYS2**
- 下载并安装 [MSYS2](https://www.msys2.org/)
- 安装MinGW工具链`pacman -S mingw-w64-x86_64-toolchain`
2. **设置Rust工具链**
```bash
rustup default stable-x86_64-pc-windows-gnu
rustup target add x86_64-pc-windows-gnu
```
3. **编译命令**
```bash
# 进入rust目录
cd rust
# 清理之前的构建
cargo clean
# 编译release版本
cargo build --release
```
4. **输出文件**
- 编译后的可执行文件:`target/release/guba.exe`
- 复制到项目根目录:`guba-rust.exe`
## 注意事项
@@ -266,16 +284,6 @@ python .trae/skills/pyinstaller-one/clean.py
## 开发扩展
### 模块结构
- `main.py`: 主程序入口,负责组件初始化和信号连接
- `main_window.py`: GUI界面和用户交互处理
- `config_manager.py`: 配置文件管理和持久化
- `database.py`: SQLite数据库操作和数据管理
- `spider.py`: 网页爬取和数据提取
- `llm_analyzer.py`: 大语言模型情感分析
- `waveform_widget.py`: 股票数据波形图绘制
- `screenshot_manager.py`: 网页截图功能
### 二次开发
项目采用模块化设计,易于扩展新功能:
- 可添加新的爬取目标和解析规则
- 支持接入其他大模型API