基于Python+大数据的潮流美妆分析可视化系统设计与实现

本文介绍了潮流美妆大数据分析可视化系统的设计,包括其功能需求、技术环境(Python/Django/MySQL/Scrapy等)、数据设计(E-R图)、用户界面展示和数据爬取与处理过程,以及如何利用Python爬虫技术抓取数据并进行初步的清洗和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一.前言

在这里插入图片描述

目前,与传统数据相比,大数据具有数据量大、种类多、成本低的特点。大数据的意义不仅局限于互联网产业的发展,而且对数字信息时代的发展起着重要的作用。从而带动了计算机的发展,在繁忙的时代,紧张的生活节奏中,无疑需要引进先进的信息管理技术,那么在信息化潮流下,潮流美妆大数据分析可视化系统应运而生,肩负起历史时期的使命。
对于美妆公司来说,大量复杂的美妆信息难于通过传统的方法进行管理;对于学校的管理者来说,繁琐的信息使他们感到迷茫。潮流美妆大数据分析可视化系统分析可视化设计与实现正是针对上述的问题而开发的,通过计算机系统来管理数据信息,可以解决大量信息的查询和相关管理,同时也为美妆公司的管理者或用户提供便利。目前管理信息系统鱼龙混杂,相关管理工作并不能真正的实现一体化,为了更好的为美妆公司和用户着想,想他们之所需,实现美妆公司日常管理工作的整套流程。
本课题就是以潮流美妆大数据分析可视化系统爬取为例,介绍网络爬虫的基本原理,Python环境的搭建,PyCharm scrapy模块的爬虫数据的运用,把获取到的数据进行清洗、整合,储存数据到MySQL,然后进行数据可视化的呈现,简单对呈现的图进行数据分析。


二.技术环境

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


三.功能设计

本系统有二个角色:管理员和用户,要求具备以下功能:
(a) 管理员;管理员使用本系统涉到的功能主要有:系统首页、个人中心、用户管理、美妆信息管理、系统管理等功能。管理员用例图如图所示。
在这里插入图片描述
(b) 用户;进入系统可以实现首页、美妆信息、公告资讯、个人中心等功能进行操作。用户用例图如图所示。

在这里插入图片描述

系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。潮流美妆大数据分析可视化系统的整个设计结构如图所示。
在这里插入图片描述

四.数据设计

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

五.部分效果展示

系统前台功能实现效果

当游客打开系统的网址后,首先看到的就是首页界面。在这里,游客能够看到潮流美妆大数据分析可视化系统的导航条显示首页、美妆信息、公告资讯、个人中心等。系统首页界面如图所示:
在这里插入图片描述

当用户进入前台系统进行相关操作前必须进行注册、登录,用户登录界面如图所示:

在这里插入图片描述

用户点击美妆信息;在美妆信息页面的搜索栏输入标题、作者、类型,进行查询,然后可以查看题、作者、头像、来源、类型、标签、播放量、弹幕量、收藏量、点赞量、点击次数等详情信息;如图所示。

在这里插入图片描述

在个人中心页面可以输入个人详细信息,进行信息更新操作,如图所示:

在这里插入图片描述

系统后台功能实现效果

管理员登录,管理员通过登录页面输入用户名、密码选择角色,并点击登录操作,如图所示。
在这里插入图片描述

管理员登录进入潮流美妆大数据分析可视化系统可以查看系统首页、个人中心、用户管理、美妆信息管理、系统管理等功能,进行详细操作,如图所示。
在这里插入图片描述

管理员点击用户管理;在用户管理页面输入用户账号、用户姓名、性别、用户电话、头像等信息,进行查询、新增或删除用户信息等操作;如图所示。
在这里插入图片描述

管理员点击美妆信息管理;在美妆信息管理页面输入标题、作者、头像、来源、类型、标签、播放量、弹幕量、收藏量、点赞量、点击次数等信息,进行查询,新增、爬起数据或删除美妆信息等操作;如图所示。

在这里插入图片描述

管理员点击系统管理;在系统管理页面输入关于我们、系统简介、轮播图管理、公告资讯等信息,进行查询或修改系统信息等操作;如图所示。
在这里插入图片描述

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

潮流美妆大数据分析可视化系统基本情况分析展示,如图所示。
在这里插入图片描述

对于潮流美妆大数据分析可视化系统获取分析数据之后,开始对这些数据进行可视化分析,首先是播放量的基本情况,通过柱状图的形式展示,如图所示。
在这里插入图片描述

弹幕量以条形图形式展示如图,如图所示:
在这里插入图片描述

作者用饼状图形式展示如图,让用户对作者信息有个直观了解,如图所示:

在这里插入图片描述

点赞量用柱状图表形式展示如图,如图所示:

在这里插入图片描述

六.部分功能代码

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import MeizhuangxinxiItem
import time
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji

# 美妆信息
class MeizhuangxinxiSpider(scrapy.Spider):
    name = 'meizhuangxinxiSpider'
    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%BE%8E%E5%A6%86&qv_id=JW35BLUzCALaf3dfr3prgXKCaYDfxfBp&ad_resource=5654&source_tag=3&gaia_vtoken=&category_id=&search_type=video&dynamic_offset=36&w_rid=9451e301ba830560a338056c122bdc66&wts=1679547965'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''
    headers = {
        "referer":"https://search.bilibili.com/all?vt=47939731&keyword=%E7%BE%8E%E5%A6%86&from_source=webtop_search&spm_id_from=333.1007&search_source=5&page=2&o=36",
"cookie":"buvid3=98224B18-2373-C05E-1592-20B71B278BD772139infoc; _uuid=EB4A465E-31098-FC96-106410-868772F63A9371931infoc; buvid4=503E5600-36FD-16DB-DC21-4F4AD2B8C17B72837-022061310-CaptW741unTPTU7Ltr6AHg%3D%3D; CURRENT_BLACKGAP=0; blackside_state=0; i-wanna-go-back=-1; b_ut=7; nostalgia_conf=-1; PVID=1; buvid_fp_plain=undefined; b_nut=100; CURRENT_FNVAL=4048; is-2022-channel=1; sid=7xmdl0q0; rpdid=|(mmkk)mlk|0J'uY~~)ku|~Y; bsource=search_baidu; header_theme_version=CLOSE; home_feed_column=5; innersign=1; fingerprint=cbaee3047c557baa7670aea99a91695a; buvid_fp=cbaee3047c557baa7670aea99a91695a; b_lsid=F36A322D_1870CDB4C01"
    }

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

    def start_requests(self):

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

        pageNum = 1 + 1
        for url in self.start_urls:
            if '{}' in url:
                for page in range(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
                )

    # 列表解析
    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, '711ka_meizhuangxinxi') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

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

            fields = MeizhuangxinxiItem()




            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

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



        return fields

    # 去除多余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

    # 数据缓存源
    def temp_data(self):

        connect = self.db_connect()
        cursor = connect.cursor()
        sql = '''
            insert into `meizhuangxinxi`(
                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 `711ka_meizhuangxinxi`
            where(not exists (select
                id
                ,laiyuan
                ,biaoti
                ,zuozhe
                ,touxiang
                ,fengmian
                ,miaoshu
                ,leixing
                ,biaoqian
                ,bofangliang
                ,danmuliang
                ,shoucangliang
                ,dianzanliang
            from `meizhuangxinxi` where
                `meizhuangxinxi`.id=`711ka_meizhuangxinxi`.id
            ))
            limit {0}
        '''.format(random.randint(10,15))

        cursor.execute(sql)
        connect.commit()

        connect.close()


最后

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一点毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值