毕业设计题目:Django+Vue 某具体事件的网络分析系统

一、 系统总体设计目标

  1. 多源数据采集:从新闻网站、社交媒体、论坛、短视频平台等多个渠道采集与目标事件相关的文本数据。

  2. 核心舆情分析:对采集的文本进行情感分析、关键词提取、主题聚类、观点挖掘等。

  3. 态势动态追踪:追踪舆情在不同时间段的声量、情感倾向和话题演变趋势。

  4. 关键节点识别:自动识别高影响力媒体、关键传播用户和核心观点。

  5. 交互式可视化:通过仪表盘、图表和关系网络图,直观、交互地呈现分析结果。


二、 系统基本框架(五层结构)

这是一个典型的数据流水线架构,从数据采集到最终展示。

1. 数据采集层

负责从互联网上定向抓取数据。

  • 数据源

    • 新闻媒体:新浪、腾讯、网易等主流新闻门户。

    • 社交媒体:微博(核心)、知乎、豆瓣小组。

    • 短视频平台:抖音、B站(通过评论API或爬虫)。

    • 论坛:贴吧、天涯等。

  • 采集方式

    • 网络爬虫:使用 Scrapy 或 Requests + BeautifulSoup 编写定向爬虫,针对特定网站结构进行抓取。

    • 平台API:优先使用官方API(如微博开放平台),但通常有频率和数量限制。

    • 中间件:使用 Scrapy-Redis 实现分布式爬虫,提高采集效率。

    • 数据存储:将爬取的原始数据(标题、内容、发布时间、作者、转发/评论数、链接等)存入 MongoDB(适合存储非结构化的爬虫数据)或 MySQL

2. 数据存储与处理层

这是系统的核心,负责存储和加工数据。

  • 数据仓库/数据库

    • MongoDB:存储原始的、非结构化的爬虫数据。

    • MySQL:存储清洗后的结构化数据、用户信息、系统配置等。

    • Redis:用作爬虫URL去重的布隆过滤器、任务队列和热点数据缓存。

  • 数据处理

    • 数据清洗:去除HTML标签、广告、无关符号、重复数据等。

    • 自然语言处理

      • 中文分词:使用 Jieba 分词库。

      • 情感分析:使用预训练模型(如 SnowNLPBERT 微调)判断每条文本的情感极性(正面、负面、中性)。

      • 关键词与主题提取:使用 TF-IDFTextRank 算法或 LDA 主题模型,提取核心关键词和话题簇。

      • 命名实体识别:识别文本中的人名、地名、机构名等。

    • 任务调度:使用 Celery Beat 或 Apache Airflow 来定时调度爬虫任务和NLP分析任务。

3. 后端服务层

基于 Django 提供 RESTful API 和数据管理后台。

  • Django 项目结构

    • 核心Apppublic_opinion_api

    • 模型:定义数据模型,如 Event(热点事件)、Article(文章/帖子)、Weibo(微博数据)、SentimentResult(情感分析结果)等。

    • 序列化器:使用 Django REST Framework 将模型和查询结果序列化为JSON。

    • 视图:提供一系列RESTful API端点,如:

      • api/events/ (获取事件列表)

      • api/events/<id>/trend/ (获取某事件的舆情声量趋势)

      • api/events/<id>/sentiment/ (获取某事件的情感分布)

      • api/events/<id>/hot_topics/ (获取某事件的热门话题)

      • api/events/<id>/influencers/ (获取某事件的关键影响者)

    • 管理员后台:使用Django Admin,方便管理员管理爬虫任务、查看数据、定义分析事件。

4. 前端可视化层

基于 Vue 构建动态、单页面的分析工作台。

  • Vue 项目结构

    • 路由:使用 Vue Router 管理不同页面。

    • 状态管理:使用 Pinia 管理全局状态,如当前选中的事件、时间范围等。

    • HTTP客户端:使用 Axios 调用后端API。

    • 可视化组件

      • 图表库Apache ECharts(必备),用于绘制折线图(声量趋势)、饼图(情感分布)、柱状图(媒体排行)、词云(关键词)。

      • 关系图库G6 或 ECharts关系图,用于绘制传播路径图。

      • UI框架Element Plus,用于快速搭建页面布局、表格和表单。

    • 典型页面

      • 事件总览页:列表展示所有被监控的社会热点事件。

      • 事件详情分析页

        • 概览仪表盘:核心KPI,如总声量、情感比例、主要媒体来源。

        • 声量趋势图:展示事件在全网讨论热度的变化。

        • 情感分析图:展示正面、负面、中性情感的比例和变化趋势。

        • 话题演化图:展示不同时间段内,核心话题的变迁。

        • 关键词词云:直观展示事件的核心词汇。

        • 媒体与博主排行:按影响力(转发/评论数)排名的媒体和用户列表。

        • 原始数据列表:可筛选、搜索的原始言论列表。

5. 任务调度与监控层

负责驱动整个数据流水线。

  • 任务队列:使用 Redis 作为 Celery 的消息代理,处理异步任务(如爬虫、NLP分析)。

  • 定时任务:使用 Celery Beat 定时触发爬虫任务(如每30分钟抓取一次)。

  • 监控:监控爬虫成功率、NLP任务运行状态,失败时发送告警。


三、 核心工作流程(以“某品牌食品安全事件”为例)

  1. 事件定义:管理员在Django后台创建一个新事件“XX品牌食品安全事件”,并配置需要爬取的关键词和网站源。

  2. 定时采集:Celery Beat 定时触发爬虫任务,爬虫根据关键词从各大平台抓取数据,存入MongoDB。

  3. NLP分析:爬虫完成后,自动触发Celery NLP任务,对新增数据进行情感分析、关键词提取等,并将结果存入MySQL。

  4. 前端展示

    • 用户打开Vue前端,选择“XX品牌食品安全事件”。

    • 前端调用 api/events/<id>/trend/ 等API。

    • Django后端从MySQL和MongoDB中聚合数据,返回给前端。

    • Vue组件使用ECharts渲染出声量在事件曝光、企业回应、官方介入等关键时间点的爆发式增长,以及情感从“中性好奇”到“负面愤怒”的演变过程。

运行结果展示:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐