# 股吧数据爬取与情感分析系统

基于东方财富网股吧数据的爬虫系统，支持数据爬取、情感分析和关键词挖掘。

## 功能特性

- 🕷️ **股吧数据爬取** - 自动爬取指定股票的股吧帖子
- 😊 **情感分析** - 基于大连理工大学情感词汇本体进行情绪计算
- 🔍 **关键词挖掘** - 使用TF-IDF算法提取热门话题
- 📊 **可视化输出** - 生成词云、情绪分布图等可视化图表

## 项目结构

```
guba2vec/
├── spider.py              # 股吧数据爬虫
├── sentiment_analysis.py  # 情感分析模块
├── analyze.py             # TF-IDF关键词分析
├── requirements.txt       # 依赖列表
├── 大连理工大学中文情感词汇本体.xlsx  # 情感词典
└── data/                  # 爬取数据存储目录
    └── guba_*.json/xlsx
```

## 安装依赖

```bash
pip install -r requirements.txt
```

## 使用方法

### 1. 爬取股吧数据

```bash
python spider.py
```

默认爬取以下游戏行业股票：
- 完美世界 (002624)
- 三七互娱 (002555)
- 巨人网络 (002558)
- 世纪华通 (002602)
- 昆仑万维 (300418)
- 游族网络 (002174)
- 掌趣科技 (300315)
- 吉比特 (603444)

爬取结果保存在 `data/` 目录下，包含 JSON 和 Excel 两种格式。

### 2. 情感分析

```bash
python sentiment_analysis.py
```

基于大连理工大学中文情感词汇本体进行情绪分析，支持7种情绪类型：
- 正面情绪：快乐、好评、惊讶
- 负面情绪：愤怒、悲伤、恐惧、厌恶

分析结果保存在 `sentiment_output/` 目录，包含：
- 各股票详细情感数据（CSV）
- 情绪统计汇总（CSV）
- 可视化图表（PNG）

### 3. 关键词分析

```bash
python analyze.py
```

使用TF-IDF算法提取关键词并生成词云，结果保存在 `output/` 目录。

## 核心模块说明

### spider.py

主要函数：
- `fetch_guba_data(code, page, page_size, sort_type)` - 爬取单页数据
- `fetch_stock_posts(code, name, pages, page_size)` - 爬取多页数据
- `save_to_json(data, name, filename)` - 保存为JSON格式
- `save_to_excel(data, name, filename)` - 保存为Excel格式

### sentiment_analysis.py

主要函数：
- `build_sentiment_dictionary()` - 构建情感词典
- `emotion_caculate(text, sentiment_dict)` - 计算文本情绪
- `load_and_analyze_data(data_dir, output_dir)` - 批量分析数据
- `generate_visualizations()` - 生成可视化图表

### analyze.py

主要函数：
- `clean_text(text)` - 文本清洗
- `tokenize(text)` - 中文分词
- `calculate_tfidf(texts)` - 计算TF-IDF
- `get_top_keywords()` - 获取Top关键词
- `generate_wordcloud()` - 生成词云

## 情感词典

使用 **大连理工大学中文情感词汇本体**（需自行准备），包含：
- 27469个情感词汇
- 7种情感分类
- 3种强度等级
- 2种极性（正面/负面）

备用方案：内置简化版情感词典，包含约200个常用情感词。

## 数据格式

### 爬取数据 (JSON)
```json
{
  "stock_code": "002624",
  "stock_name": "完美世界",
  "total_pages": 10,
  "total_posts": 200,
  "crawl_time": "2024-01-01T12:00:00",
  "posts": [
    {
      "post_id": "123456",
      "post_title": "标题",
      "post_content": "内容",
      "post_user": {"user_nickname": "用户名"},
      "post_publish_time": "2024-01-01 10:00",
      "post_click_count": 100,
      "post_comment_count": 10,
      "post_like_count": 5
    }
  ]
}
```

### 情感分析结果 (CSV)
| 帖子ID | 标题 | 内容 | positive | negative | sentiment_score |
|--------|------|------|----------|----------|-----------------|
| 123456 | ... | ... | 5 | 2 | 3 |

## 注意事项

1. 爬虫使用模拟移动端请求，请合理控制爬取频率
2. 情感词典文件需放置在项目根目录
3. 首次运行可能需要下载jieba分词字典
4. 生成词云需要系统安装中文字体（默认使用SimHei）

## 依赖列表

| 库 | 版本 | 用途 |
|----|------|------|
| requests | >=2.28.0 | HTTP请求 |
| pandas | >=2.0.0 | 数据处理 |
| openpyxl | >=3.1.0 | Excel读写 |
| jieba | >=0.42.1 | 中文分词 |
| scikit-learn | >=1.3.0 | TF-IDF计算 |
| numpy | >=1.24.0 | 数值计算 |
| matplotlib | >=3.7.0 | 可视化 |
| wordcloud | >=1.9.0 | 词云生成 |

## License

MIT License