Files
guba-indicator/README.md

295 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 股吧人气指示器 (Guba Sentiment Indicator)
一个基于 **Rust + eframe** 的桌面悬浮小工具,专为股票投资者设计,通过爬取股吧或论坛评论,使用大语言模型分析投资者情绪倾向,并以直观的可视化方式展示市场人气冷暖程度。
## 主要功能
### 1. 智能评论爬取系统
- **自定义爬取规则**: 支持通过XPath表达式自定义爬取目标可灵活配置目标URL和内容选择器
- **智能去重机制**: 使用内容哈希算法自动识别和过滤重复评论,避免重复分析
- **自适应刷新**: 根据爬取结果动态调整刷新频率,无新内容时自动延长刷新间隔
- **多重解析策略**: 采用正则表达式多重解析机制,提高爬取成功率
- **用户代理配置**: 支持自定义User-Agent增强反爬虫适应性
### 2. 大语言模型情感分析
- **多模型支持**: 支持OpenAI兼容API包括NVIDIA API等主流大模型平台
- **精准情感评分**: 为每条评论生成0-100分的情感倾向评分0为极度悲观100为极度乐观
- **智能标签生成**: 自动为分析结果生成情感标签(极度悲观、悲观、中立、乐观、极度乐观等)
- **API测试功能**: 配置界面提供API连接测试确保配置正确
- **分析历史记录**: 完整保存每次分析的结果和时间戳
### 3. 可视化情感指示器
- **动态指示灯**: 基于分析结果实时更新的环形指示灯,颜色随情感倾向变化
- **渐变色彩系统**:
- 0-30分: 蓝色系(悲观情绪)
- 30-70分: 绿黄渐变(中性情绪)
- 70-100分: 红色系(乐观情绪)
- **精确数值显示**: 实时显示当前平均情感分数和整体情绪标签
- **发光特效**: 采用发光效果增强视觉体验
### 4. 股票数据可视化
- **上证指数实时数据**: 自动获取上证指数数据并绘制波形图
- **历史数据追踪**: 保留最近100个数据点展示价格变化趋势
- **图表自动更新**: 与评论分析同步更新
### 5. 桌面客户端界面
- **悬浮窗口**: 现代化无边框设计,支持窗口拖拽和置顶显示
- **白色主题**: 简洁美观的白色主题界面,提高可读性
- **中文字体支持**: 自动加载系统中文字体,确保界面显示正常
- **配置对话框**: 图形化配置界面,支持实时修改各项参数
- **状态显示**: 实时显示当前运行状态和处理进度
### 6. 数据管理与持久化
- **SQLite数据库**: 使用SQLite存储所有评论、分析结果和历史数据
- **结构化存储**: 评论表、分析历史表分离存储
- **数据统计**: 实时统计爬取次数、分析次数等运行指标
- **自动清理**: 支持历史数据管理
### 7. 高级配置选项
- **API配置**: 支持自定义API Base URL、API Key、模型选择和超时设置
- **爬虫配置**: 可调整目标URL、XPath表达式、刷新间隔等参数
- **UI配置**: 支持透明度、置顶状态、情感阈值等界面设置
- **阈值自定义**: 可自定义"寒冷"(悲观)和"温暖"(乐观)的情感分界线
## 技术栈
### 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解析器
- **Playwright**: 高级网页自动化和截图
## 安装与配置
### 环境要求Rust版本
- **Windows 10/11**: 64位系统
- **MSYS2 + MinGW**: 用于编译Rust代码
- **Rust 1.70+**: 安装rustup后自动管理
### 安装步骤Rust版本
1. **克隆或下载项目**
```bash
git clone http://124.223.26.33:3000/xiaji/guba-indicator.git
cd guba
```
2. **编译项目**
```bash
# 进入rust目录
cd rust
# 编译release版本无控制台窗口
cargo build --release
# 生成的可执行文件在 target/release/guba.exe
```
3. **配置API密钥**
编辑 `config.json` 文件填入您的大语言模型API配置
```json
{
"llm_api": {
"base_url": "https://integrate.api.nvidia.com/v1",
"api_key": "your-api-key-here",
"model": "deepseek-ai/deepseek-r1",
"timeout": 120
}
}
```
4. **配置爬取参数**
在配置中设置目标URL和XPath表达式
```json
{
"spider": {
"target_url": "https://example.com",
"xpath": "//a[contains(@class, 'linkblack')]",
"fetch_interval": 15
}
}
```
### 运行程序
- **直接运行**: 双击 `guba-rust.exe` 文件
- **无控制台窗口**: 程序以GUI模式运行不会显示命令行窗口
- **图标支持**: 程序使用 `guba.ico` 作为应用图标
## 配置详解
### LLM API配置
- `base_url`: 大模型API的基础URL
- `api_key`: API访问密钥
- `model`: 使用的模型名称
- `timeout`: API请求超时时间
### 爬虫配置
- `target_url`: 目标网站URL
- `xpath`: 用于提取评论的XPath表达式
- `user_agent`: HTTP请求的User-Agent字符串
- `fetch_interval`: 爬取间隔时间(秒)
### UI配置
- `opacity`: 窗口透明度0.3-1.0
- `is_on_top`: 是否置顶显示
- `thresholds`: 情感阈值设置
- `cold`: 悲观阈值默认30
- `warm`: 乐观阈值默认70
### 数据库配置
- `path`: SQLite数据库文件路径
## 使用说明
### 基本操作
1. 启动程序后,主界面将显示情感指示器
2. 程序自动开始爬取评论并分析情感
3. 指示器颜色和数值实时反映市场情绪
4. 波形图显示上证指数走势
### 按钮功能
- **开始/停止**: 控制爬取和分析过程
- **刷新**: 手动触发一次评论爬取和分析
- **配置**: 打开配置对话框修改各项参数
### 配置界面
- **API配置**: 设置大语言模型API参数包含测试按钮验证配置
- **爬虫配置**: 设置目标网站和爬取参数
- **阈值设置**: 调整情感分析的阈值
- **界面设置**: 调整窗口透明度和置顶状态
## 高级功能
### API测试功能
在配置界面中点击"测试API"按钮,程序会:
- 检查API连接是否正常
- 验证API Key是否有效
- 获取并显示可用的模型列表
- 显示测试结果和状态
### 实时数据统计
程序会统计以下运行指标:
- 爬取网站次数
- 提交API分析次数
- 平均情感分数趋势
### 自定义情感标签
系统根据以下规则自动分类情感:
- 0-29分: 极度悲观
- 30-39分: 悲观
- 40-44分: 偏悲观
- 45-55分: 中立
- 56-64分: 偏乐观
- 65-69分: 乐观
- 70-100分: 极度乐观
## 故障排除
### 常见问题
1. **无法获取评论**
- 检查目标URL是否可访问
- 验证XPath表达式是否正确
- 确认网络连接正常
2. **API调用失败**
- 检查API Key是否正确
- 确认API服务是否可用
- 查看网络连接和防火墙设置
3. **界面显示异常**
- 检查系统中是否安装了中文字体
- 尝试调整透明度设置
### 日志文件
运行日志输出到控制台,可通过命令行启动查看详细信息:
```bash
# 查看日志
.uba-rust.exe > log.txt 2>&1
```
## 项目结构
### 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资源配置
### Python版本保留
- `main.py`: 主程序入口
- `main_window.py`: GUI界面
- `config_manager.py`: 配置管理
- `database.py`: 数据库操作
- `spider.py`: 网页爬取
- `llm_analyzer.py`: 情感分析
- `waveform_widget.py`: 波形图绘制
## 编译说明
### 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`
## 注意事项
1. **API费用**: 使用大语言模型API可能产生费用请注意控制调用频率
2. **网络环境**: 确保网络连接稳定以保证爬取和API调用的正常进行
3. **反爬虫**: 遵守目标网站的robots.txt协议和使用条款
4. **数据隐私**: 所有数据本地存储,不会上传到第三方服务器
## 开发扩展
### 模块结构
项目采用模块化设计,易于扩展新功能:
- 可添加新的爬取目标和解析规则
- 支持接入其他大模型API
- 可扩展更多数据可视化方式
- 支持多股票同时监控
## 许可证
本项目仅供学习交流使用,请遵守相关法律法规和网站使用条款。