这个基于Django+Vue的某社会热点事件网络舆情分析系统,是我在计算机专业毕业设计期间完成的一个大数据分析项目。系统通过爬取微博平台的博文、评论等数据,结合情感分析算法,实现了对特定社会热点事件的舆情监测和预警功能。
作为一名计算机专业的学生,我选择这个项目作为毕业设计,主要基于以下几点考虑:
系统采用前后端分离架构,前端使用Vue+ECharts实现数据可视化,后端采用Django框架处理数据和业务逻辑,数据采集使用Scrapy爬虫框架,存储使用MySQL数据库。
在技术选型上,我主要考虑了以下几个因素:
前端技术栈:
选择Vue+ECharts的组合主要考虑到:
后端技术栈:
选择Django+Scrapy的组合基于:
系统采用B/S架构,整体分为三层:

这种分层架构的优势在于:
数据采集是整个系统的基础,我使用Scrapy框架实现了微博数据的爬取:
python复制import scrapy
from scrapy.http import FormRequest
class WeiboSpider(scrapy.Spider):
name = 'weibo'
def start_requests(self):
# 模拟登录
return [FormRequest(
"https://weibo.com/login.php",
formdata={'username': 'your_username', 'password': 'your_password'}
)]
def parse(self, response):
# 解析热搜页面
for topic in response.css('.hot_topic'):
yield {
'title': topic.css('.title::text').get(),
'heat': topic.css('.heat::text').get(),
'url': topic.css('a::attr(href)').get()
}
# 爬取评论数据
for comment in response.css('.comment_list li'):
yield {
'content': comment.css('.content::text').get(),
'user': comment.css('.user::text').get(),
'time': comment.css('.time::text').get()
}
爬虫实现要点:
情感分析是系统的核心功能,我采用了基于词典的情感分析方法:
python复制import jieba
from snownlp import SnowNLP
class SentimentAnalyzer:
def __init__(self):
# 加载自定义情感词典
self.pos_dict = self.load_dict('pos_dict.txt')
self.neg_dict = self.load_dict('neg_dict.txt')
def load_dict(self, file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return set(line.strip() for line in f)
def analyze(self, text):
# 分词
words = jieba.lcut(text)
# 情感词统计
pos_count = sum(1 for word in words if word in self.pos_dict)
neg_count = sum(1 for word in words if word in self.neg_dict)
# 使用SnowNLP进行辅助分析
s = SnowNLP(text)
sentiment_score = s.sentiments
# 综合判断情感倾向
if pos_count > neg_count or sentiment_score > 0.6:
return 'positive'
elif neg_count > pos_count or sentiment_score < 0.4:
return 'negative'
else:
return 'neutral'
情感分析优化策略:
前端使用Vue+ECharts实现数据可视化,主要图表包括:
javascript复制// Vue组件中使用ECharts
<template>
<div class="chart-container">
<div ref="chart" style="width:100%;height:400px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
props: ['chartData'],
mounted() {
this.initChart()
},
methods: {
initChart() {
const chart = echarts.init(this.$refs.chart)
const option = {
title: { text: '情感分析结果' },
tooltip: {},
series: [{
name: '情感分布',
type: 'pie',
data: [
{value: this.chartData.positive, name: '积极'},
{value: this.chartData.negative, name: '消极'},
{value: this.chartData.neutral, name: '中性'}
]
}]
}
chart.setOption(option)
}
}
}
</script>
可视化优化技巧:
系统使用MySQL数据库,主要表设计如下:
1. 用户表(users)
sql复制CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 热点话题表(topics)
sql复制CREATE TABLE topics (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
heat INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
3. 评论表(comments)
sql复制CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
topic_id INT NOT NULL,
content TEXT NOT NULL,
user_name VARCHAR(100),
sentiment VARCHAR(20),
sentiment_score FLOAT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (topic_id) REFERENCES topics(id)
);
前端开发环境:
后端开发环境:
采用Docker容器化部署方案:
docker-compose.yml示例:
yaml复制version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: weibo_analysis
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
backend:
build: ./backend
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./backend:/code
ports:
- "8000:8000"
depends_on:
- db
frontend:
build: ./frontend
command: npm run serve
volumes:
- ./frontend:/app
ports:
- "8080:8080"
部署注意事项:
通过这个毕业设计项目,我实现了:
系统的主要技术指标:
未来可以从以下几个方面进行优化:
算法优化:
系统扩展:
性能优化:
这个项目让我深刻理解了大数据处理的全流程,从数据采集、存储、处理到可视化展示。特别是在处理微博这种非结构化数据时,需要考虑各种边界情况和异常处理,这对我的工程能力是很好的锻炼。