330-基于Python的社交媒体舆情监控系统

社交媒体舆情监控系统

基于 Python Django 框架开发的社交媒体舆情监控与分析系统,支持微博、知乎等多平台数据采集、情感分析、可视化展示,为用户提供全面的舆情监控解决方案。


目录


系统概述

本系统是一个功能完整的社交媒体舆情监控平台,主要功能包括:

  • 多平台数据采集:支持微博、知乎等社交媒体数据爬取
  • 实时热搜监控:获取各平台实时热搜榜单
  • 情感分析:基于SnowNLP的中文情感分析
  • 数据可视化:ECharts图表展示,词云图生成
  • 用户管理:完整的用户认证与权限系统
  • 知乎数据分析:用户行为分析、主题分析、关键词分析

系统架构图

复制代码
┌─────────────────────────────────────────────────────────────┐
│                       前端展示层                              │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐           │
│  │Bootstrap│ │ ECharts │ │ jQuery  │ │ WordCloud│           │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘           │
├─────────────────────────────────────────────────────────────┤
│                       Django Web层                           │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐           │
│  │  Views  │ │Templates│ │  URLs   │ │  Forms  │           │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘           │
├─────────────────────────────────────────────────────────────┤
│                       业务逻辑层                              │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐           │
│  │ SpiderService│ │SentimentSvc │ │AnalysisSvc  │           │
│  │  (数据爬取)  │ │ (情感分析)   │ │ (数据分析)   │           │
│  └─────────────┘ └─────────────┘ └─────────────┘           │
├─────────────────────────────────────────────────────────────┤
│                       数据存储层                              │
│  ┌─────────────────────────────────────────────┐           │
│  │                   MySQL                      │           │
│  │  Article | HotSearch | CrawlTask | ZhihuUser │           │
│  └─────────────────────────────────────────────┘           │
└─────────────────────────────────────────────────────────────┘

技术栈

后端技术

技术 版本 说明
Python 3.8+ 编程语言
Django 4.2+ Web框架
MySQL 5.7+ 数据库
SnowNLP 0.12.3 中文情感分析
Jieba 0.42.1 中文分词
Requests 2.28+ HTTP请求库
BeautifulSoup4 4.12+ HTML解析
WordCloud 1.9+ 词云生成
Pandas 1.5+ 数据处理

前端技术

技术 版本 说明
Bootstrap 5.3 UI框架
ECharts 5.4+ 数据可视化
jQuery 3.6+ JavaScript库
Font Awesome 6.0 图标库

系统配色

颜色 色值 用途
主色调 #1e3a5f 深蓝色,导航栏、标题
辅助色 #2c5282 中蓝色,按钮、链接
背景色 #f8f9fa 浅灰色,页面背景
成功色 #28a745 绿色,正面情感
警告色 #ffc107 黄色,中性情感
危险色 #dc3545 红色,负面情感

演示图片

330-基于Python的社交媒体舆情监控系统

























































环境要求

最低配置

  • CPU: 双核处理器
  • 内存: 4GB RAM
  • 存储: 10GB可用空间
  • 操作系统: Windows 10+ / Ubuntu 18.04+ / macOS 10.14+

推荐配置

  • CPU: 四核处理器
  • 内存: 8GB RAM
  • 存储: 50GB SSD
  • 数据库: MySQL 8.0+

安装部署

开发环境部署

1. 克隆项目
bash 复制代码
git clone <项目地址>
cd code
2. 创建虚拟环境
bash 复制代码
# Windows
python -m venv venv
venv\Scripts\activate

# Linux/macOS
python3 -m venv venv
source venv/bin/activate
3. 安装依赖
bash 复制代码
pip install -r requirements.txt
4. 配置数据库

编辑 social_media_analysis/settings.py:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sentiment_db',
        'USER': 'root',
        'PASSWORD': 'your_password',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        }
    }
}
5. 初始化数据库
bash 复制代码
# 创建数据库(MySQL命令行)
mysql -u root -p
CREATE DATABASE sentiment_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit

# 执行迁移
python manage.py makemigrations
python manage.py migrate

# 创建管理员账户
python manage.py createsuperuser
6. 启动服务
bash 复制代码
python manage.py runserver

访问 http://127.0.0.1:8000 即可使用系统。

生产环境部署

使用 Gunicorn + Nginx
1. 安装 Gunicorn
bash 复制代码
pip install gunicorn
2. 配置 Gunicorn

创建 gunicorn.conf.py:

python 复制代码
bind = '127.0.0.1:8000'
workers = 4
worker_class = 'sync'
timeout = 120
keepalive = 5
errorlog = '/var/log/gunicorn/error.log'
accesslog = '/var/log/gunicorn/access.log'
loglevel = 'info'
3. 配置 Nginx
nginx 复制代码
server {
    listen 80;
    server_name your_domain.com;

    location /static/ {
        alias /path/to/project/static/;
    }

    location /media/ {
        alias /path/to/project/media/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
4. 启动服务
bash 复制代码
# 收集静态文件
python manage.py collectstatic

# 启动 Gunicorn
gunicorn -c gunicorn.conf.py social_media_analysis.wsgi:application

Docker部署

1. Dockerfile
dockerfile 复制代码
FROM python:3.9-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    default-libmysqlclient-dev \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "social_media_analysis.wsgi:application"]
2. docker-compose.yml
yaml 复制代码
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DB_HOST=db
      - DB_NAME=sentiment_db
      - DB_USER=root
      - DB_PASSWORD=your_password
    volumes:
      - static_volume:/app/static
      - media_volume:/app/media

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: sentiment_db
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3307:3306"

volumes:
  mysql_data:
  static_volume:
  media_volume:
3. 启动容器
bash 复制代码
docker-compose up -d

配置说明

settings.py 主要配置

python 复制代码
# 调试模式(生产环境设为False)
DEBUG = True

# 允许的主机
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'your_domain.com']

# 时区设置
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True

# 语言设置
LANGUAGE_CODE = 'zh-hans'

# 静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

# 媒体文件配置
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

# Session配置
SESSION_COOKIE_AGE = 86400  # 24小时
SESSION_EXPIRE_AT_BROWSER_CLOSE = False

功能模块

1. 用户认证模块

功能列表
  • 用户登录:支持用户名密码登录
  • 用户注册:新用户注册
  • 密码找回:忘记密码功能
  • 密码修改:已登录用户修改密码
  • 个人中心:查看和编辑个人资料
访问路径
功能 URL 说明
登录 /login/ 用户登录页面
注册 /register/ 用户注册页面
登出 /logout/ 退出登录
忘记密码 /forgot-password/ 密码找回
个人中心 /profile/ 个人资料页面
修改密码 /change-password/ 密码修改页面

2. 微博舆情监控模块

功能列表
  • 微博监控面板:实时数据概览
  • 微博热搜:实时热搜榜单
  • 微博文章:文章列表与搜索
  • 情感分析:文章情感分布
  • 地区分布:发布地区地图展示
访问路径
功能 URL 说明
监控面板 /weibo/monitor/ 微博数据概览
热搜榜 /weibo/hotsearch/ 实时热搜
文章列表 /weibo/articles/ 微博文章
情感分析 /weibo/sentiment/ 情感分布
地区地图 /weibo/region-map/ 地区分布
爬虫任务 /crawler/tasks/ 数据采集管理

3. 知乎数据分析模块

功能列表
  • 关键词分析:热门关键词排行、词云图
  • 用户分析:知乎用户画像统计
  • 主题分析:主题热度排行
  • 数据总览:多维度数据统计
访问路径
功能 URL 说明
关键词分析 /analysis/keywords/ 关键词统计
用户分析 /analysis/users/ 用户数据分析
主题分析 /analysis/topics/ 主题热度分析
数据总览 /analysis/overview/ 综合数据统计

4. 数据可视化模块

图表类型
  • 柱状图:数据对比展示
  • 折线图:趋势变化分析
  • 饼图:比例分布展示
  • 词云图:关键词可视化
  • 地图:地域分布展示

5. 收藏与推荐模块

功能列表
  • 主题收藏:收藏感兴趣的主题
  • 我的收藏:查看收藏列表
  • 智能推荐:基于行为的个性化推荐
访问路径
功能 URL 说明
我的收藏 /favorites/ 收藏列表
添加收藏 /favorite/{topic_id}/ 收藏主题
取消收藏 /unfavorite/{topic_id}/ 取消收藏
推荐主题 /recommend/ 智能推荐

操作手册

1. 系统登录

  1. 访问系统首页 http://your_domain.com/
  2. 点击右上角"登录"按钮
  3. 输入用户名和密码
  4. 点击"登录"按钮完成登录

2. 用户注册

  1. 在登录页面点击"注册新账户"
  2. 填写用户名、邮箱、密码
  3. 确认密码后点击"注册"
  4. 注册成功后自动跳转登录

3. 查看微博热搜

  1. 登录系统后进入首页
  2. 点击导航栏"微博监控" > "热搜榜"
  3. 查看实时热搜排行榜
  4. 点击热搜词可跳转至微博查看详情

4. 文章搜索

  1. 进入"微博监控" > "文章列表"
  2. 在搜索框输入关键词
  3. 可选择筛选条件:平台、情感、时间范围
  4. 点击"搜索"查看结果

5. 情感分析查看

  1. 进入"微博监控" > "情感分析"
  2. 查看情感分布饼图
  3. 查看情感趋势折线图
  4. 可按时间范围筛选数据

6. 启动数据采集

  1. 进入"爬虫任务"页面
  2. 点击"新建任务"按钮
  3. 选择目标平台(微博/知乎)
  4. 输入采集关键词或分类
  5. 点击"开始采集"启动任务
  6. 在任务列表查看采集进度

7. 知乎数据分析

  1. 进入"数据分析"菜单
  2. 选择分析类型:关键词/用户/主题
  3. 查看图表和统计数据
  4. 可导出分析报告

8. 收藏主题

  1. 浏览主题列表页面
  2. 点击主题卡片上的收藏图标
  3. 或进入主题详情页点击"收藏"按钮
  4. 在"我的收藏"页面管理收藏

API文档

仪表盘API

获取仪表盘概览
复制代码
GET /api/dashboard/overview/

响应示例:

json 复制代码
{
  "code": 200,
  "data": {
    "total_articles": 15680,
    "today_articles": 234,
    "positive_ratio": 45.2,
    "negative_ratio": 18.5,
    "neutral_ratio": 36.3
  }
}
获取趋势数据
复制代码
GET /api/dashboard/trend/?days=7

参数:

  • days: 天数(默认7)
获取情感分布
复制代码
GET /api/dashboard/sentiment/
获取平台分布
复制代码
GET /api/dashboard/platform/
获取地区分布
复制代码
GET /api/dashboard/region/

文章API

获取文章列表
复制代码
GET /api/articles/?page=1&page_size=20&keyword=xxx&platform=weibo&sentiment=positive

参数:

  • page: 页码
  • page_size: 每页数量
  • keyword: 搜索关键词
  • platform: 平台筛选
  • sentiment: 情感筛选
搜索文章
复制代码
GET /api/search/articles/?q=关键词&platform=weibo

热搜API

获取热搜榜
复制代码
GET /api/hotsearch/{platform}/

平台参数:weibo, zhihu, douyin

响应示例:

json 复制代码
{
  "code": 200,
  "data": [
    {
      "rank": 1,
      "keyword": "热搜词",
      "hot_value": 5234567,
      "url": "https://..."
    }
  ]
}
获取微博实时热搜
复制代码
GET /api/weibo/realtime-hotsearch/

分析API

作者排行
复制代码
GET /api/analytics/author-ranking/?limit=10
时段分析
复制代码
GET /api/analytics/hourly/
平台对比
复制代码
GET /api/analytics/platform-compare/

采集API

启动采集任务
复制代码
POST /api/crawl/start/
Content-Type: application/json

{
  "platform": "weibo",
  "keyword": "搜索关键词",
  "category": "分类"
}
情感分析
复制代码
POST /api/sentiment/analyze/
Content-Type: application/json

{
  "article_ids": [1, 2, 3]
}

数据库设计

核心数据表

Article(舆情文章表)
字段 类型 说明
id INT 主键
platform VARCHAR(20) 平台:weibo/zhihu/douyin
platform_id VARCHAR(100) 平台原始ID
title VARCHAR(500) 标题
content TEXT 正文内容
content_len INT 内容字数
like_num INT 点赞数
comments_len INT 评论数
reposts_count INT 转发数
view_count INT 浏览数
region VARCHAR(50) 发布地区
created_at DATETIME 发布时间
crawl_time DATETIME 采集时间
author_name VARCHAR(100) 作者名称
sentiment VARCHAR(20) 情感:positive/negative/neutral
sentiment_score DECIMAL(5,4) 情感分数
keywords VARCHAR(500) 关键词
HotSearch(热搜表)
字段 类型 说明
id INT 主键
platform VARCHAR(20) 平台
rank_num INT 排名
keyword VARCHAR(200) 热搜关键词
hot_value BIGINT 热度值
category VARCHAR(50) 分类
url VARCHAR(500) 链接
is_hot BOOLEAN 是否热门
is_new BOOLEAN 是否新上榜
fetch_time DATETIME 抓取时间
CrawlTask(采集任务表)
字段 类型 说明
id INT 主键
task_name VARCHAR(100) 任务名称
platform VARCHAR(20) 目标平台
keywords VARCHAR(500) 采集关键词
status VARCHAR(20) 状态:pending/running/completed/failed
total_count INT 采集总数
success_count INT 成功数量
fail_count INT 失败数量
start_time DATETIME 开始时间
end_time DATETIME 结束时间
error_msg TEXT 错误信息
ZhihuUser(知乎用户表)
字段 类型 说明
id INT 主键
user_id VARCHAR(100) 知乎用户ID
name VARCHAR(200) 用户名
headline TEXT 个人签名
gender INT 性别
follower_count INT 粉丝数
following_count INT 关注数
answer_count INT 回答数
voteup_count INT 获赞数
ZhihuTopic(知乎主题表)
字段 类型 说明
id INT 主键
title VARCHAR(256) 标题
description TEXT 描述
category VARCHAR(64) 分类
play_count INT 播放数
comment_count INT 评论数
like_count INT 点赞数
favorite_count INT 收藏数
share_count INT 分享数
author_name VARCHAR(128) 作者名称

ER关系图

复制代码
┌─────────────┐       ┌─────────────┐
│   Article   │       │  HotSearch  │
├─────────────┤       ├─────────────┤
│ id          │       │ id          │
│ platform    │       │ platform    │
│ content     │       │ keyword     │
│ sentiment   │       │ hot_value   │
│ author_name │       │ fetch_time  │
└─────────────┘       └─────────────┘

┌─────────────┐       ┌─────────────┐
│  CrawlTask  │       │  ZhihuUser  │
├─────────────┤       ├─────────────┤
│ id          │       │ id          │
│ task_name   │       │ user_id     │
│ platform    │       │ name        │
│ status      │       │ follower    │
│ total_count │       │ voteup      │
└─────────────┘       └─────────────┘

┌─────────────┐       ┌─────────────┐
│ ZhihuTopic  │◄──────│UserFavorite │
├─────────────┤       ├─────────────┤
│ id          │       │ id          │
│ title       │       │ user_id(FK) │
│ category    │       │ topic_id(FK)│
│ like_count  │       │ created_at  │
└─────────────┘       └─────────────┘
        │
        │ FK
        ▼
┌─────────────┐
│    User     │
├─────────────┤
│ id          │
│ username    │
│ email       │
└─────────────┘

常见问题

Q1: 如何修改数据库连接?

编辑 social_media_analysis/settings.py 中的 DATABASES 配置:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'USER': '用户名',
        'PASSWORD': '密码',
        'HOST': '主机地址',
        'PORT': '3306',
    }
}

Q2: 如何添加新的数据分析功能?

  1. views.py 中编写视图函数
  2. urls.py 中添加URL路由
  3. templates/ 中创建HTML模板
  4. 使用ECharts进行数据可视化

Q3: 爬虫无法获取数据?

可能原因:

  • 网络连接问题
  • 目标网站反爬限制
  • Cookie或登录状态失效

解决方法:

  • 检查网络连接
  • 更新请求头和Cookie
  • 添加请求延迟避免被封

Q4: 情感分析不准确?

SnowNLP的情感分析基于训练数据,对于特定领域可能不够准确。可以:

  • 收集领域数据重新训练模型
  • 结合关键词规则进行修正
  • 使用更专业的NLP模型

Q5: 如何备份数据?

bash 复制代码
# 导出数据
python manage.py dumpdata > backup.json

# 导入数据
python manage.py loaddata backup.json

# MySQL备份
mysqldump -u root -p sentiment_db > backup.sql

Q6: 如何部署HTTPS?

使用Nginx配置SSL证书:

nginx 复制代码
server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # 其他配置...
}

Q7: 系统运行缓慢?

优化建议:

  • 为数据库表添加索引
  • 使用Redis缓存热点数据
  • 优化SQL查询语句
  • 考虑分表或读写分离

更新日志

v2.0.0

  • 新增微博舆情监控功能
  • 新增情感分析模块
  • 新增热搜榜实时监控
  • 新增地区分布地图
  • 优化UI设计,采用深蓝色主题
  • 重构爬虫服务模块

v1.0.0

  • 初始版本发布
  • 知乎用户行为分析
  • 关键词分析与词云
  • 用户收藏与推荐

技术支持

如有问题或建议,请通过以下方式联系:

  • 查看帮助文档:/help/
  • 系统公告:/announcements/

声明:本系统仅供学习研究使用,请遵守相关法律法规和平台使用条款。

相关推荐
森焱森1 小时前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
he___H1 小时前
双色球红球
python
invicinble1 小时前
对于对产品的理解
大数据·信息可视化·数据分析
deephub2 小时前
机器学习特征工程:分类变量的数值化处理方法
python·机器学习·特征工程·分类变量
城数派2 小时前
2026年1月全国各省市路网数据(Shp)
数据分析
Pyeako2 小时前
深度学习--卷积神经网络(下)
人工智能·python·深度学习·卷积神经网络·数据增强·保存最优模型·数据预处理dataset
OPEN-Source2 小时前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
廖圣平2 小时前
从零开始,福袋直播间脚本研究【七】《添加分组和比特浏览器》
python
B站_计算机毕业设计之家2 小时前
豆瓣电影数据可视化分析系统 | Python Flask框架 requests Echarts 大数据 人工智能 毕业设计源码(建议收藏)✅
大数据·python·机器学习·数据挖掘·flask·毕业设计·echarts