分享一个基于Python的抖音女装数据分析系统flask毕设女装数据采集系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

💕💕Java项目
💕💕微信小程序项目
💕💕Android项目
💕💕Python项目
💕💕PHP项目
💕💕ASP.NET项目
💕💕Node.js项目
💕💕选题推荐

项目实战|基于python的时尚女装抖音评论数据分析与可视化

1、研究背景

  随着移动互联网的快速发展,短视频平台如抖音迅速崛起,成为用户日常生活中不可或缺的一部分。尤其是在电商领域,抖音平台的女装类目逐渐成为商家推广与用户购买的重要渠道。基于此,如何有效收集、处理并分析抖音平台上与女装相关的数据,已成为商家提升市场竞争力的重要手段。因此,开发一个基于Python的抖音女装数据分析系统,能够帮助商家更好地理解市场趋势,制定更加精准的营销策略。

2、研究目的和意义

  本系统的开发旨在通过Scrapy爬虫技术采集抖音平台上女装相关视频的数据,并对这些数据进行清洗和存储,以便进行后续的分析与展示。通过整合Flask框架和Echarts可视化工具,本系统不仅能够提供详细的数据分析结果,如点赞数、收藏数、分享数和评价数等信息,还能通过大屏展示直观地呈现这些数据,帮助用户更直观地掌握市场动态。同时,系统还将提供用户注册、登录及管理功能,增强用户体验。

  基于Python的抖音女装数据分析系统的开发具有重要的实践意义,它展示了Python在数据采集、清洗、存储和可视化中的强大能力,特别是在短视频电商领域的应用。其次,通过对抖音女装视频数据的深入分析,系统可以为商家提供数据驱动的决策支持,从而提升营销效果。系统还为用户提供了便捷的操作界面和丰富的功能,提升了用户的管理体验,为未来在其他电商平台的推广与应用提供了宝贵的参考。

3、系统研究内容

本研究围绕抖音平台上女装视频数据的采集与分析展开,旨在通过Python技术构建一个全面的数据采集与可视化分析系统。研究利用Scrapy爬虫技术,自动化地从抖音平台上抓取与女装相关的视频数据,包括点赞数、收藏数、分享数、评价数等关键指标。针对采集到的原始数据,进行必要的数据处理与清洗,以确保数据的准确性和一致性,并将处理后的数据存储在MySQL数据库中,便于后续的查询和分析。

在数据处理完成后,研究重点转向数据的可视化分析与展示。通过整合Echarts可视化工具,研究开发了多个可视化模块,如点赞数可视化、收藏数可视化、分享数可视化、评价数可视化等,以直观展示抖音女装视频数据的分布与趋势。研究还通过Python和Flask框架,构建了一个功能完善的Web系统,支持用户注册、登录、个人设置、时尚女装管理和系统公告管理等功能,为用户提供了便捷的操作界面和丰富的分析工具。

研究的最终目标是通过本系统提供的多维度数据分析与可视化展示,帮助用户全面了解抖音平台上女装视频的受欢迎程度及市场表现,从而为商家的营销策略提供数据支持。同时研究还探讨了Python技术在大数据处理与可视化中的应用价值,为相关领域的进一步研究和开发提供了参考。

4、系统页面设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如需要源码,可以扫取文章下方二维码联系咨询

5、参考文献

[1]王瑞.基于数据挖掘的电商女装个性化需求分析和预测研究[D].南京邮电大学,2023. DOI:10.27251/d.cnki.gnjdc.2023.001199.
[2]吴飞平.基于大数据的快时尚女装流行预测与对策研究[J].服装设计师,2023,(05):112-115.DOI:10.20100/j.cnki.cn11-4548/ts.2023.05.007.
[3]陈广智,曾霖,刘伴晨,等.基于Python的电商网站服装数据的爬取与分析[J].计算机技术与发展,2022,32(07):46-51.
[4]王梦云.基于虚拟仿真的女装礼服交互式定制推荐系统的设计研究[D].天津工业大学,2022. DOI:10.27357/d.cnki.gtgyu.2022.000022.
[5]牟俊芝.基于二维图像处理的花卉图案在现代女装中的创新应用[D].武汉纺织大学,2022. DOI:10.27698/d.cnki.gwhxj.2022.000313.
[6]王含.基于多元线性回归的服装部件设计研究[D].青岛科技大学,2021. DOI:10.27264/d.cnki.gqdhc.2021.000921.
[7]胡梦莹.基于深度学习的女装风格分析与评价[D].东华大学,2021. DOI:10.27012/d.cnki.gdhuu.2021.000243.
[8]叶锦.商品图像的细粒度分类及评论口碑预测方法研究与应用[D].中国科学院大学(中国科学院深圳先进技术研究院),2019.
[9]傅白璐.基于数据挖掘的女装廓形流行趋势智能分析预测系统研究[D].东华大学,2018.
[10]何周舟.基于时序数据的结构学习与模式预测联合优化算法研究[D].浙江大学,2016.

6、核心代码

# # -*- coding: utf-8 -*-

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import ShishangnvzhuangItem
import time
from datetime import datetime,timedelta
import datetime as formattime
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
from selenium.webdriver import ChromeOptions, ActionChains
from scrapy.http import TextResponse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 时尚女装
class ShishangnvzhuangSpider(scrapy.Spider):
    name = 'shishangnvzhuangSpider'
    spiderUrl = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAv4--wP6DNkgOIZAsRCT3PeKYBaKw9wp7rZsT6upzbMA&max_cursor=0&locate_query=false&show_live_replay_strategy=1&need_time_list=1&time_list_query=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=122.0.0.0&browser_online=true&engine_name=Blink&engine_version=122.0.0.0&os_name=Windows&os_version=10&cpu_core_num=12&device_memory=8&platform=PC&downlink=9.45&effective_type=4g&round_trip_time=250&webid=7325027079245612555&msToken=Htwt6oJPKCBk9RqwGr0Q4XSJ9s73At9d7NKWoBvO8S2JVSsJmcaujC3aVwQOjjDPji5PYtuyOzqDBQU1DAwMh8QzKD7Ux6jCNHtwcCpQxVHSZ-dK7Ps=&X-Bogus=DFSzswVOmBsANVbotLQanJB9Pizt'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''
    realtime = False

    headers = {
        'Cookie':'用自己的Cookie',
'Referer':'https://www.douyin.com/user/MS4wLjABAAAAv4--wP6DNkgOIZAsRCT3PeKYBaKw9wp7rZsT6upzbMA'
    }

    def __init__(self,realtime=False,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.realtime = realtime=='true'

    def start_requests(self):

        plat = platform.system().lower()
        if not self.realtime and (plat == 'linux' or plat == 'windows'):
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'r3op4b2w_shishangnvzhuang') == 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 not self.realtime and (plat == 'linux' or plat == 'windows'):
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, 'r3op4b2w_shishangnvzhuang') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return
        data = json.loads(response.body)
        try:
            list = data["aweme_list"]
        except:
            pass
        for item in list:
            fields = ShishangnvzhuangItem()


            try:
                fields["title"] = emoji.demojize(self.remove_html(str( item["preview_title"] )))

            except:
                pass
            try:
                fields["source"] = emoji.demojize(self.remove_html(str( item["share_url"] )))

            except:
                pass
            try:
                fields["tags"] = emoji.demojize(self.remove_html(str(','.join(str(i['tag_name']) for i in  item["video_tag"]) )))

            except:
                pass
            try:
                fields["diggcount"] = int( item["statistics"]["digg_count"])
            except:
                pass
            try:
                fields["collectcount"] = int( item["statistics"]["collect_count"])
            except:
                pass
            try:
                fields["sharecount"] = int( item["statistics"]["share_count"])
            except:
                pass
            try:
                fields["commentcount"] = int( item["statistics"]["comment_count"])
            except:
                pass
            try:
                fields["duration"] = int( item["duration"])
            except:
                pass
            try:
                fields["fbsj"] = emoji.demojize(self.remove_html(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime( item["create_time"])) )))

            except:
                pass
            try:
                fields["author"] = emoji.demojize(self.remove_html(str( item["author"]["nickname"] )))

            except:
                pass
            try:
                fields["picture"] = emoji.demojize(self.remove_html(str( item["video"]["cover"]["url_list"][0] )))

            except:
                pass
            yield fields

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

    # 数据清洗
    def pandas_filter(self):
        engine = create_engine('mysql+pymysql://root:123456@localhost/spiderr3op4b2w?charset=UTF8MB4')
        df = pd.read_sql('select * from shishangnvzhuang limit 50', con = engine)

        # 重复数据过滤
        df.duplicated()
        df.drop_duplicates()

        #空数据过滤
        df.isnull()
        df.dropna()

        # 填充空数据
        df.fillna(value = '暂无')

        # 异常值过滤

        # 滤出 大于800 和 小于 100 的
        a = np.random.randint(0, 1000, size = 200)
        cond = (a<=800) & (a>=100)
        a[cond]

        # 过滤正态分布的异常值
        b = np.random.randn(100000)
        # 3σ过滤异常值,σ即是标准差
        cond = np.abs(b) > 3 * 1
        b[cond]

        # 正态分布数据
        df2 = pd.DataFrame(data = np.random.randn(10000,3))
        # 3σ过滤异常值,σ即是标准差
        cond = (df2 > 3*df2.std()).any(axis = 1)
        # 不满⾜条件的⾏索引
        index = df2[cond].index
        # 根据⾏索引,进⾏数据删除
        df2.drop(labels=index,axis = 0)

    # 去除多余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 `shishangnvzhuang`(
                id
                ,title
                ,source
                ,tags
                ,diggcount
                ,collectcount
                ,sharecount
                ,commentcount
                ,duration
                ,fbsj
                ,author
                ,picture
            )
            select
                id
                ,title
                ,source
                ,tags
                ,diggcount
                ,collectcount
                ,sharecount
                ,commentcount
                ,duration
                ,fbsj
                ,author
                ,picture
            from `r3op4b2w_shishangnvzhuang`
            where(not exists (select
                id
                ,title
                ,source
                ,tags
                ,diggcount
                ,collectcount
                ,sharecount
                ,commentcount
                ,duration
                ,fbsj
                ,author
                ,picture
            from `shishangnvzhuang` where
                `shishangnvzhuang`.id=`r3op4b2w_shishangnvzhuang`.id
            ))
            order by rand()
            limit 50;
        '''

        cursor.execute(sql)
        connect.commit()
        connect.close()

💕💕作者:计算机源码社
💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、文档报告
💕💕如需要源码,可以扫取文章下方二维码联系咨询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值