0


基于Python+大数据的微博事件分析可视化系统设计与实现

💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。
👇🏻 精彩专栏 推荐订阅👇🏻
计算机毕业设计精品项目案例-200套
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人

一.前言

在这里插入图片描述

近些年,随着中国经济发展,人民的生活质量逐渐提高,对网络的依赖性越来越高,通过网络处理的事务越来越多。随着微博事件的常态化,如果依然采用传统的管理方式,将会为工作人员带来庞大的工作量,这将是一个巨大考验,需要投入大量人力开展对科技视频等相关工作进行管理,单一且反复的操作容易出错且不易被察觉,于是利用现代信息技术,设计开发一款微博事件分析与可视化系统,能够极大的节省人力物力、提高工作效率、降低工作成本。
本课题拟采用PyCharm开发工具,大数据、Python语言、Django框架进行开发,后台使用MySQL数据库进行信息管理,设计开发的微博事件分析与可视化系统。通过调研和分析,系统拥有管理员和看板展示两个模块,主要具备有系统首页、个人中心、科技视频管理、管理员管理、系统管理等功能模块。将纸质管理有效实现为在线管理,极大提高工作效率。


二.技术环境

开发语言:Python
python框架:django
软件版本:python3.7/python3.8
数据库:mysql 5.7或更高版本
数据库工具:Navicat11
爬虫框架:Scrapy
开发软件:PyCharm/vs code
前端框架:vue.js


三.功能设计

在设计系统的过程中,用例图也是系统设计过程中必不可少的模型,如果说系统的结构图可以简洁明了的表示出系统的有关功能模块,那么用例图则可以更为细致的,结合系统中人员的有关分配,能够从细节上描绘出系统中有关功能所完成的具体事件,确切的反映出某个操作以及它们相互之间的内部联系。
其中参与者就是和系统能够发生交互的外在实体,一般可以指系统的某个用户。一个用例图就能对应出系统中的一个功能过程,系统中完整的功能都是由许多不同的用例图所组成的。
系统用例图如图3-1、图3-2、图3-3所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。本系统的整个设计结构如图所示。

在这里插入图片描述

四.数据设计

概念模型的设计是为了抽象真实世界的信息,并对信息世界进行建模。它是数据库设计的强大工具。数据库概念模型设计可以通过E-R图描述现实世界的概念模型。系统的E-R图显示了系统中实体之间的链接。而且Mysql数据库是自我保护能力比较强的数据库,下图主要是对数据库实体的E-R图:
在这里插入图片描述
在这里插入图片描述

五.部分效果展示

系统管理员功能实现效果

管理员登录,在登录页面正确输入用户名和密码后,点击登录操作;如图所示。
在这里插入图片描述

管理员进入系统后,主要功能包括对系统首页、个人中心、科技视频管理、管理员管理、系统管理等进行操作。管理员主页面如图所示:
在这里插入图片描述

管理员点击科技视频管理:在科技视频管理页面,可以对来源、标题、作者、头像、封面、类型、标签、播放量、弹幕量、收藏量、点赞量等信息,进行查询、爬起数据或者删除科技视频等操作,如图所示:
在这里插入图片描述

点击管理员管理:在管理员管理页面,可以对用户名、密码、角色等信息,进行查询或者新增、删除管理员信息等操作,如图所示:
在这里插入图片描述

管理员点击系统简介:在系统简介页面,可以对标题、副标题、图片1、图片2、图片3等信息,进行查询或者新增、删除系统简介等操作,如图所示:

在这里插入图片描述

数据可视化分析大屏展示实现效果

微博事件分析与可视化系统展示图,如图所示。

在这里插入图片描述

下面展示是类型统计,对于类型统计大数据,数据获取之后,开始对这些数据进行可视化分析,首先是类型统计的基本情况,其中根据爬取的数据以饼状图的形式来展示,如图所示。
在这里插入图片描述

下面展示是播放量统计,对于播放量统计大数据获取之后,开始对这些数据进行可视化分析,首先通过页面查看播放量统计详情以柱状图分析进行来展示,如图所示。

在这里插入图片描述

在弹幕量统计页面以曲线图进行展示所示。

在这里插入图片描述

下图是收藏量统计,通过python爬取清洗后的数据以条形图的形式展示如图所示:

在这里插入图片描述

下图是点赞量统计,通过python爬取清洗后的数据以曲线图的形式展示如图所示:
在这里插入图片描述

下面展示是科技视频(播放量TOP10),对于科技视频(播放量TOP10)大数据获取之后,开始对这些数据进行可视化分析,首先通过页面查看科技视频(播放量TOP10)详情以信息表分析进行来展示,如图5所示。
在这里插入图片描述

六.部分功能代码

# 数据爬取文件import scrapy
import pymysql
import pymssql
from..items import KejishipinItem
import time
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji

# 科技视频classKejishipinSpider(scrapy.Spider):
    name ='kejishipinSpider'
    spiderUrl ='https://api.bilibili.com/x/web-interface/wbi/search/type?__refresh__=true&_extra=&context=&page={}&page_size=42&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&keyword=%E7%A7%91%E6%8A%80&qv_id=D5J5KQY274Nj8ovbvMgzXFQbyDAyJaqM&ad_resource=5654&source_tag=3&gaia_vtoken=&category_id=&search_type=video&dynamic_offset=0&w_rid=dc3d965c545359fe070799becacb8133&wts=1679762002'
    start_urls = spiderUrl.split(";")
    protocol =''
    hostname =''
    headers ={"referer":"https://search.bilibili.com/video?vt=61951754&keyword=%E7%A7%91%E6%8A%80&from_source=webtop_search&spm_id_from=333.1073&search_source=5","cookie":"buvid3=C3DBC8AF-22C2-9160-A90C-F43A7064AE3C69871infoc; b_nut=1672032169; _uuid=1059846FA-A910D-C54E-4E52-10B114A21AEEE70054infoc; i-wanna-go-back=-1; b_ut=7; CURRENT_FNVAL=4048; rpdid=0zbfAGNgd2|5NSwSom8|Jgt|3w1PvQbF; buvid4=CD94B71C-30E5-93B3-C90D-D7BBBA88CACD71600-022122613-U%2FXEx45J5Ljnzvd0qDNCkg%3D%3D; header_theme_version=CLOSE; home_feed_column=5; nostalgia_conf=-1; fingerprint=c979bc580abc38166f486e3c70f0d6cc; buvid_fp_plain=undefined; DedeUserID=1035763135; DedeUserID__ckMd5=fd65af7fa113217d; buvid_fp=91c1d808c55e0e3b39815505dffea928; PVID=6; b_lsid=F3D39C810_1871996663D; is-2022-channel=1; SESSDATA=0fe0b929%2C1695313500%2C4dcea%2A31; bili_jct=0c240fa5b8833c47ee749e2e0a522795; sid=6n2156jr; innersign=1; CURRENT_PID=0d181360-cb2a-11ed-b04c-c1318da4666b"}def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)defstart_requests(self):

        plat = platform.system().lower()if plat =='linux'or plat =='windows':
            connect = self.db_connect()
            cursor = connect.cursor()if self.table_exists(cursor,'x580n_kejishipin')==1:
                cursor.close()
                connect.close()
                self.temp_data()return

        pageNum =1+1for url in self.start_urls:if'{}'in url:for page inrange(1, pageNum):
                    next_link = url.format(page)yield scrapy.Request(
                        url=next_link,
                        headers=self.headers,
                        callback=self.parse
                    )else:yield scrapy.Request(
                    url=url,
                    headers=self.headers,
                    callback=self.parse
                )# 列表解析defparse(self, response):
        
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()if plat =='windows_bak':passelif plat =='linux'or plat =='windows':
            connect = self.db_connect()
            cursor = connect.cursor()if self.table_exists(cursor,'x580n_kejishipin')==1:
                cursor.close()
                connect.close()
                self.temp_data()return

        data = json.loads(response.body)list= data["data"]["result"]for item inlist:

            fields = KejishipinItem()

            fields["laiyuan"]= item["arcurl"]
            fields["biaoti"]= item["title"]
            fields["zuozhe"]= item["author"]
            fields["touxiang"]= item["upic"]
            fields["fengmian"]= item["pic"]
            fields["miaoshu"]= item["description"]
            fields["leixing"]= item["typename"]
            fields["biaoqian"]= item["tag"]
            fields["bofangliang"]= item["play"]
            fields["danmuliang"]= item["video_review"]
            fields["shoucangliang"]= item["favorites"]
            fields["dianzanliang"]= item["like"]yield fields

    # 详情解析defdetail_parse(self, response):
        fields = response.meta['fields']return fields

    # 去除多余html标签defremove_html(self, html):if html ==None:return''
        pattern = re.compile(r'<[^>]+>', re.S)return pattern.sub('', html).strip()# 数据库连接defdb_connect(self):type= self.settings.get('TYPE','mysql')
        host = self.settings.get('HOST','localhost')
        port =int(self.settings.get('PORT',3306))
        user = self.settings.get('USER','root')
        password = self.settings.get('PASSWORD','123456')try:
            database = self.databaseName
        except:
            database = self.settings.get('DATABASE','')iftype=='mysql':
            connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')else:
            connect = pymssql.connect(host=host, user=user, password=password, database=database)return connect

    # 断表是否存在deftable_exists(self, cursor, table_name):
        cursor.execute("show tables;")
        tables =[cursor.fetchall()]
        table_list = re.findall('(\'.*?\')',str(tables))
        table_list =[re.sub("'",'',each)for each in table_list]if table_name in table_list:return1else:return0# 数据缓存源deftemp_data(self):

        connect = self.db_connect()
        cursor = connect.cursor()
        sql ='''
            insert into `kejishipin`(
                id
                ,laiyuan
                ,biaoti
                ,zuozhe
                ,touxiang
                ,fengmian
                ,miaoshu
                ,leixing
                ,biaoqian
                ,bofangliang
                ,danmuliang
                ,shoucangliang
                ,dianzanliang
            )
            select
                id
                ,laiyuan
                ,biaoti
                ,zuozhe
                ,touxiang
                ,fengmian
                ,miaoshu
                ,leixing
                ,biaoqian
                ,bofangliang
                ,danmuliang
                ,shoucangliang
                ,dianzanliang
            from `x580n_kejishipin`
            where(not exists (select
                id
                ,laiyuan
                ,biaoti
                ,zuozhe
                ,touxiang
                ,fengmian
                ,miaoshu
                ,leixing
                ,biaoqian
                ,bofangliang
                ,danmuliang
                ,shoucangliang
                ,dianzanliang
            from `kejishipin` where
                `kejishipin`.id=`x580n_kejishipin`.id
            ))
            limit {0}
        '''.format(random.randint(10,15))

        cursor.execute(sql)
        connect.commit()

        connect.close()

最后

最新计算机毕业设计选题篇-选题推荐(值得收藏)
计算机毕业设计精品项目案例-200套(值得订阅)


本文转载自: https://blog.csdn.net/qq_15801219/article/details/135904939
版权归原作者 一点毕设 所有, 如有侵权,请联系我们删除。

“基于Python+大数据的微博事件分析可视化系统设计与实现”的评论:

还没有评论