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/

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

相关推荐
九皇叔叔4 小时前
《MySQL 体系架构详解:Server 层、SQL 执行流程与 InnoDB、MyISAM、MEMORY 存储引擎》
sql·mysql·架构
Mr数据杨5 小时前
医学影像分类实战复盘 从 Kaggle 竞赛到可落地建模流程
人工智能·数据分析·kaggle竞赛
jay神6 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
lupai7 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
Mr数据杨7 小时前
GNSS伪距误差预测实战案例 从Kaggle回归任务到城市定位误差补偿
人工智能·数据分析·kaggle竞赛
愤怒的苹果ext7 小时前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh
荷蒲8 小时前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人
阿童木写作8 小时前
跨境电商图片翻译工具,批量翻译视频字幕一键抠图
人工智能·python·音视频
何以解忧,唯有..9 小时前
Pydantic 介绍与使用:Python 数据校验的现代方案
数据库·python·microsoft
又幸福了哥10 小时前
Python入门到高级(知识点七)
python