# weiboAnalysis **Repository Path**: final__fc/weibo-analysis ## Basic Information - **Project Name**: weiboAnalysis - **Description**: 微博舆情数据可视化分析系统 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-07-26 - **Last Updated**: 2026-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, MySQL, Redis, Nlp, JavaScript ## README # 微博舆情数据分析可视化系统 基于 Flask 的微博舆情数据采集、分析与可视化平台。支持微博热门内容爬取、情感分析、词云生成、数据可视化等功能。 ## 页面展示 ### 首页 | 首页 | |------| | ![首页](screenshots/01-home.png) | ### 热词分析 & 文章舆情 | 热词分析 | 微博文章舆情统计分析 | |----------|----------------------| | ![热词分析](screenshots/02-tableData.png) | ![文章舆情](screenshots/03-tableDataArticle.png) | ### 数据可视化 | 文章分析 | IP分析 | |----------|--------| | ![文章分析](screenshots/04-articleChar.png) | ![IP分析](screenshots/05-ipChar.png) | | 评论分析 | 舆情分析 | |----------|----------| | ![评论分析](screenshots/06-commentChar.png) | ![舆情分析](screenshots/07-yuqingChar.png) | ### 舆情分析 | 舆情分析 | |-----------------------------------------| | ![舆情分析](screenshots/08-yuqing-detail.png) | ### 文章内容词云图 | 文章内容词云图 | |---------------------------------------| | ![文章内容词云图](screenshots/09-contentCloud.png) | ## 技术栈 ``` ┌─────────────────────────────────────────────────────────┐ │ 🚀 技术架构 │ ├──────────┬──────────┬──────────┬──────────┬─────────────┤ │ Flask │ MySQL │ Redis │ JWT │ Bootstrap │ │ 后端框架 │ 数据库 │ 缓存 │ 认证 │ 前端UI │ ├──────────┼──────────┼──────────┼──────────┼─────────────┤ │ ECharts │ jieba │ SnowNLP │ WordCloud│ Matplotlib │ │ 数据图表 │ 中文分词 │ 情感分析 │ 词云生成 │ 数据可视化 │ ├──────────┼──────────┼──────────┼──────────┼─────────────┤ │ Pandas │ NumPy │ Scikit- │ APSche- │ Playwright │ │ 数据处理 │ 数值计算 │ learn │ duler │ 浏览器自动化 │ │ │ │ 机器学习 │ 定时任务 │ │ └──────────┴──────────┴──────────┴──────────┴─────────────┘ ``` | 层级 | 技术 | |------|------| | 后端框架 | Flask + Jinja2 | | 数据库 | MySQL | | 缓存 | Redis (惰性缓存 + 定时预热) | | 认证 | JWT (httpOnly Cookie) | | 前端 | Bootstrap + jQuery + DataTables | | 数据可视化 | ECharts / Matplotlib / WordCloud | | 中文分词 | jieba | | 情感分析 | SnowNLP + scikit-learn 朴素贝叶斯 | | 数据处理 | Pandas / NumPy | | 爬虫 | Playwright 浏览器自动化 | | 定时任务 | APScheduler | ## 功能特性 - **数据采集**:Playwright 浏览器自动化爬取微博热门时间线的文章和评论数据,支持 Cookie 自动刷新 - **情感分析**:基于 SnowNLP + 朴素贝叶斯对文章和评论进行正/中/负面情感判定 - **词云生成**:使用 jieba 分词 + wordcloud 生成文章和评论词云图(透明 PNG 适配暗黑模式) - **数据可视化**:ECharts 渲染热词云团、点赞分布、地域分布、性别统计、舆情趋势等图表 - **Redis 缓存**:2 小时定时刷新,大幅提升查询性能 ## 项目亮点 - **热词云团交互**:热词以浮动词云呈现,大小按频率缩放,每个词团独立随机浮动动画,点击通过 AJAX 无刷新更新图表 - **暗黑模式**:全局暗黑模式支持,无闪烁切换,词云图透明背景完美适配 - **爬虫反检测**:Playwright 浏览器自动化 + Cookie 三层自动刷新(HTTP验证→无头回放→手动登录),运行时热更新 Cookie 无需重启 - **缓存架构**:Redis `get_or_set` 惰性缓存 + APScheduler 定时全量预热,不可用时自动降级 MySQL;使用 SCAN 批量失效避免阻塞 - **NLP 管道**:jieba 分词 → 停用词过滤 → 词频统计,SnowNLP + scikit-learn 朴素贝叶斯双重情感引擎 - **安全设计**:JWT 存储在 httpOnly Cookie 防 XSS,密钥自动随机生成,`.env` 配置隔离不入库 - **自动化运维**:爬虫定时运行,写入后自动清空缓存并重绘词云图,NLP 管道自动运行 ## 项目结构 ``` weiboPoject/ ├── app.py # Flask 应用入口 ├── .env # 全局配置文件(Cookie / DB / Redis) ├── .env.example # 配置模板 ├── requirements.txt # Python 依赖 ├── weiboarticle.sql # 数据库建表与初始数据 ├── stopWords.txt # 中文停用词表 ├── screenshots/ # 页面截图 ├── spider/ # 微博爬虫模块 │ ├── main.py # 爬虫主控(爬取 + 入库 + 词云 + NLP) │ ├── spiderNav.py # 爬取微博导航分类 │ ├── spiderContent.py # 爬取文章内容 │ └── spiderComments.py # 爬取评论内容 ├── controllers/ # 控制器层 │ ├── page_view.py # 数据页面路由 + JSON API │ └── user_view.py # 用户登录注册 ├── utils/ # 工具层 │ ├── weiboConfig.py # 全局配置加载(.env) │ ├── cache.py # Redis 缓存模块 │ ├── query.py # MySQL 连接 │ ├── auth.py # JWT 认证 │ ├── scheduler.py # 定时缓存刷新 │ ├── getPublicData.py # 公共数据查询 │ ├── getHomeData.py # 首页数据聚合 │ ├── getTableData.py # 表格数据聚合 │ └── getEchartsData.py # 图表数据聚合 ├── model/ # NLP 模型 │ ├── index.py # 评论分词 │ ├── ciPingTotal.py # 词频统计 │ ├── yuqing.py # 舆情情感分析 │ └── trainModel.py # 贝叶斯分类器训练 ├── views/ # 前端模板 │ ├── page_templates/ # 数据页面模板 │ └── user_templates/ # 用户页面模板 └── static/ # 静态资源(含词云PNG) ``` ## 快速开始 ### 环境要求 - Python 3.8+ - MySQL 5.7+ - Redis 6.0+ ### 1. 克隆项目 ```bash git clone git@gitee.com:final__fc/weibo-analysis.git cd weibo-analysis ``` ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置 .env 文件 ```bash cp .env.example .env ``` 编辑 `.env`,填入真实配置: ``` WEIBO_COOKIE=从浏览器F12复制的Cookie ← 爬虫必填 DB_PASSWORD=你的数据库密码 ← 改成真实密码 REDIS_PASSWORD=你的Redis密码 ← 改成真实密码 JWT_EXPIRATION_MINUTES=30 ← JWT登录过期时间 ``` > `.env` 已在 `.gitignore` 中,不会被提交到 git。 创建数据库并导入表结构: ```sql CREATE DATABASE weiboarticle DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ``` ```bash mysql -u root -p weiboarticle < weiboarticle.sql ``` ### 4. 启动 Redis 确保 Redis 服务已在运行(默认 `localhost:6379`)。 ### 5. 运行情感分析预处理 ```bash python model/yuqing.py ``` ### 6. 启动应用 ```bash python app.py ``` 浏览器访问 http://127.0.0.1:5000 ,注册账号后登录即可使用。 ## 页面路由 | 路由 | 页面 | 说明 | |------|------|------| | `/page/home` | 首页 | 仪表盘:热门评论、数据概览、文章/用户分布 | | `/page/tableData` | 热词分析 | 浮动词云 + 热词年份趋势 + 评论检索 | | `/page/tableDataArticle` | 文章舆情统计 | 微博文章列表含情感分析 | | `/page/articleChar` | 文章分析 | 点赞/评论/转发区间分布图表 | | `/page/ipChar` | IP分析 | 文章和评论的中国地图地域分布 | | `/page/commentChar` | 评论分析 | 评论点赞分布 + 性别占比 + 评论词云 | | `/page/yuqingChar` | 舆情分析 | 正负面情感占比 + 热词排行 | | `/page/contentCloud` | 词云图 | 文章内容分词词云 | ## 数据爬取 ```bash python spider/main.py ``` 爬虫流程: 1. 从微博 Ajax API 获取导航分类 2. 按分类爬取热门时间线文章 3. 根据文章 ID 爬取对应评论 4. 合并数据到 MySQL `article` 和 `comments` 表 5. 清空 Redis 缓存 + 重绘词云图 6. 自动运行 NLP 情感分析管道 > 首次使用需在 `.env` 中填入有效的微博 Cookie,否则会返回 403。 ## 缓存机制 - 页面查询结果缓存在 Redis,TTL 2 小时 - 每 2 小时 APScheduler 自动预热全部缓存 - 爬虫写入数据后立即清空所有页面缓存 - Redis 不可用时自动降级为 MySQL 直接查询 ## License MIT