💗博主介绍:✌全网粉丝15W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者,计算机毕设实战导师。目前专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌
💗主要服务内容免费功能设计、选题定题、开题报告、任务书、程序开发、论文编写和辅导、论文降重、程序讲解、答辩辅导等,欢迎咨询~
👇🏻 精彩专栏 推荐订阅👇🏻
计算机毕业设计精品项目案例(持续更新)
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人

一.前言

随着互联网技术的快速发展,视频内容消费已经成为当代文化娱乐的重要组成部分。特别是在年轻一代中,视频平台如B站(哔哩哔哩)的兴起,极大地丰富了人们的日常生活和信息获取方式。然而,面对海量的视频数据,如何有效地进行数据采集、管理和分析,成为制约平台发展和用户体验提升的瓶颈之一。目前,市场上缺乏一个专门针对B站热门视频的数据分析系统,这限制了内容创作者、平台运营者以及用户对于数据的利用和理解。因此,构建一个B站热门视频数据分析系统,对于提升平台的服务质量、优化内容推荐算法、增强用户体验具有重要的现实意义。

本B站热门视频数据可视化分析系统采用的数据库是Mysql,使用django框架开发。系统利用Python语言Scrapy爬虫技术进行数据抓取与处理,结合Spark等大数据框架进行高效的数据分析,并通过数据可视化技术直观展示分析结果。


二.技术环境

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


三.功能设计

系统总体功能结构图如下所示:
在这里插入图片描述

数据采集设计图如下所示:
在这里插入图片描述

四.数据设计

系统需要数据库存储系统中的信息,MySQL数据库能够处理系统的信息,当考研信息爬虫与分析需要数据的时候,MySQL数据库能够取得数据交给服务端处理。MySQL数据库能够使用可视化软件操作,管理员可以在可视化软件对数据库的信息管理。数据库参考如下所示:

CREATE TABLE `57cj988c_paihangbang` (
  `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '标题',
  `pic` longtext CHARACTER SET utf8 COMMENT '封面',
  `location` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '发布位置',
  `author` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT 'up主',
  `playcount` bigint(20) DEFAULT NULL COMMENT '播放量',
  `danmucount` int(11) DEFAULT NULL COMMENT '弹幕数',
  `type` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '类型',
  `duration` int(11) DEFAULT NULL COMMENT '视频时长',
  `pubdate` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '上传时间',
  `laiyuan` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '来源',
  `likecount` int(11) DEFAULT NULL COMMENT '点赞量',
  `replycount` int(11) DEFAULT NULL COMMENT '回复数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `paihangbang`
--

DROP TABLE IF EXISTS `paihangbang`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `paihangbang` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) DEFAULT NULL COMMENT '标题',
  `pic` longtext COMMENT '封面',
  `type` varchar(200) DEFAULT NULL COMMENT '类型',
  `duration` int(11) DEFAULT NULL COMMENT '视频时长',
  `playcount` varchar(200) DEFAULT NULL COMMENT '播放量',
  `danmucount` int(11) DEFAULT NULL COMMENT '弹幕数',
  `likecount` int(11) DEFAULT NULL COMMENT '点赞量',
  `replycount` int(11) DEFAULT NULL COMMENT '回复数',
  `pubdate` varchar(200) DEFAULT NULL COMMENT '上传时间',
  `laiyuan` varchar(200) DEFAULT NULL COMMENT '来源',
  `location` varchar(200) DEFAULT NULL COMMENT '发布位置',
  `author` varchar(200) DEFAULT NULL COMMENT 'up主',
  `thumbsupnum` int(11) DEFAULT '0' COMMENT '赞',
  `crazilynum` int(11) DEFAULT '0' COMMENT '踩',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  `discussnum` int(11) DEFAULT '0' COMMENT '评论数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='排行榜';
/*!40101 SET character_set_client = @saved_cs_client */;

五.部分效果展示

5.1前台用户功能实现效果

当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到对B站热门视频数据可视化分析的导航条显示首页、排行榜、通知公告、投诉举报、个人中心等,系统首页界面如图所示:
在这里插入图片描述

当用户进入系统进行相关操作前必须进行注册、登录,用户注册、用户登录界面如图所示:
在这里插入图片描述

用户点击排行榜:在排行榜面的搜索栏输入标题,进行查询,可以查看标题、封面、类型、商品时长、播放量、弹幕量、点赞数、回复数、上传时间、来源、发布位置、up主、点击次数、评论数、收藏数等内容,也可以点击评论或者收藏等操作,如图所示:

在这里插入图片描述

用户点击通知公告:在通知公告页面的搜索栏输入标题,进行查询,可以查看通知公告等内容,还可以进行点赞或者收藏等操作;如图所示:
在这里插入图片描述

用户点击个人中心,在个人中心页面可以修改个人信息,还可以对修改密码、我的收藏进行详情操作,如图所示:
在这里插入图片描述

5.2后台管理员功能实现效果

管理员登录进入对B站热门视频数据可视化分析可以查看系统首页、排行榜管理、系统管理、我的信息等功能,进行详细操作,如图所示。
在这里插入图片描述

管理员点击排行榜;在排行榜页面输入类型,进行搜索,然后查看标题、封面、类型、商品时长、播放量、弹幕量、点赞数、回复数、上传时间、来源、发布位置、up主、点击次数、评论数、收藏数,还可以点击新增或删除、爬取数据等操作;如图所示。
在这里插入图片描述
管理员点击系统管理;在系统管理页面包括轮播图管理、投诉举报、通知公告、通知公告分类、系统简介,还可以点击新增或删除等操作;如图所示。
在这里插入图片描述

5.3可视化大屏展示功能实现效果

对B站热门视频数据可视化分析展示图,如图所示。
在这里插入图片描述

六.部分功能代码


import scrapy
import pymysql
import pymssql
from ..items import xiangmuItem
import time
import re
import random
import platform
import json
import os
from urllib.parse import urlparse
import requests
import emoji
class xiangmuSpider(scrapy.Spider):
    name = 'xiangmuSpider'
    spiderUrl = 'https://url网址'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)


    # 列表解析
    def parse(self, response):
        
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()
        if plat == 'windows_bak':
            pass
        elif plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'xiangmu') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

        list = response.css('ul.subject-list li.subject-item')
        
        for item in list:

            fields = xiangmuItem()



            fields["laiyuan"] = self.remove_html(item.css('div.pic a.nbg::attr(href)').extract_first())
            if fields["laiyuan"].startswith('//'):
                fields["laiyuan"] = self.protocol + ':' + fields["laiyuan"]
            elif fields["laiyuan"].startswith('/'):
                fields["laiyuan"] = self.protocol + '://' + self.hostname + fields["laiyuan"]
            fields["fengmian"] = self.remove_html(item.css('div.pic a.nbg img::attr(src)').extract_first())
            fields["xiaoshuoming"] = self.remove_html(item.css('div.info h2 a::attr(title)').extract_first())

            detailUrlRule = item.css('div.pic a.nbg::attr(href)').extract_first()
            if self.protocol in detailUrlRule:
                pass
            elif detailUrlRule.startswith('//'):
                detailUrlRule = self.protocol + ':' + detailUrlRule
            else:
                detailUrlRule = self.protocol + '://' + self.hostname + detailUrlRule
                fields["laiyuan"] = detailUrlRule

            yield scrapy.Request(url=detailUrlRule, meta={'fields': fields},  callback=self.detail_parse)


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

        try:
            if '(.*?)' in '''div#info span a::text''':
                fields["zuozhe"] = re.findall(r'''div#info span a::text''', response.text, re.S)[0].strip()
            else:
                if 'zuozhe' != 'xiangqing' and 'zuozhe' != 'detail' and 'zuozhe' != 'pinglun' and 'zuozhe' != 'zuofa':
                    fields["zuozhe"] = self.remove_html(response.css('''div#info span a::text''').extract_first())
                else:
                    fields["zuozhe"] = emoji.demojize(response.css('''div#info span a::text''').extract_first())
        except:
            pass
 # 去除多余html标签
    def remove_html(self, html):
        if html == None:
            return ''
        pattern = re.compile(r'<[^>]+>', re.S)
        return pattern.sub('', html).strip()

    # 数据库连接
    def db_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', '')

        if type == '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

    # 断表是否存在
    def table_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:
            return 1
        else:
            return 0


为什么选择我们

大学毕业那年,曾经有幸协助指导老师做过毕业设计课题分类、论文初选(查看论文的格式)、代码刻录等打杂的事情,也帮助过同界N多同学完成过毕业设计工作,毕业后在一家互联网大厂工作8年,先后从事Java前后端开发、系统架构设计等方面的工作,有丰富的编程能力和水平,也在工作之余指导过别人完成过一些毕业设计的工作。2016年至今,团队已指导上万名学生顺利通过毕业答辩,目前是csdn特邀作者、CSDN全栈领域优质创作者,博客之星、掘金/华为云/B站/知乎等平台优质作者,计算机毕设实战导师,专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎咨询~✌

最后

💕💕
最新计算机毕业设计选题篇-选题推荐
小程序毕业设计精品项目案例-200套
Java毕业设计精品项目案例-200套
Python毕业设计精品项目案例-200套
大数据毕业设计精品项目案例-200套
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐