Python爬取猫眼电影票房 + 数据可视化

目录

    • 主角查看与分析 爬取
    • 可视化分析
      • 猫眼电影上座率前10分析
      • 猫眼电影票房场均人次前10分析
      • 猫眼电影票票房占比分析

主角查看与分析 爬取

对猫眼电影票房进行爬取,首先我们打开猫眼


接着我们想要进行数据抓包,就要看网站的具体内容,通过按F12,我们可以看到详细信息。
在这里插入图片描述

通过两个对比,我们不难发现User-AgentsignKey数据是变化的(平台使用了数据加密)
在这里插入图片描述
所以我们需要对User-Agent与signKey分别进行解密。

通过造一个content字符串,包含请求方法、时间戳、User-Agent、index等信息,并对其进行MD5加密得到sign。最后将这些参数放入params字典中,准备发送请求。

def getData():
    url = 'https://piaofang.maoyan.com/dashboard-ajax/movie'
    useragents = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183'
    headers = {
        'User-Agent':useragents,
        'Referer':'https://piaofang.maoyan.com/dashboard/movie'
    }

    useragents = str(base64.b64encode(useragents.encode('utf-8')),'utf-8')
    index = str(round(random.random() * 1000))
    times = str(math.ceil(time.time() * 1000))
    content = "method=GET&timeStamp={}&User-Agent={}&index={}&channelId=40009&sVersion=2&key=A013F70DB97834C0A5492378BD76C53A".format(times,useragents,index)
    md5 = hashlib.md5()
    md5.update(content.encode('utf-8'))
    sign = md5.hexdigest()

    params = {
        'orderType': '0',
        'uuid': '17d79b87a00c8-015087c7514df4-5919145b-144000-17d79b87a00c8',
        # 时间戳
        'timeStamp': times,
        # base64加密
        'User-Agent': useragents,
        # 随机数 * 1000取整
        'index': index,
        'channelId': '40009',
        'sVersion': '2',
        # md5加密
        'signKey': sign
    }

接着我们就可以对于猫眼电影票房数据进行爬取了,比如上座率、场均人次、票房占比、电影名称、上映时间、综合票房、排片场次和排片占比等。

    resps = requests.get(url = url , headers = headers, params = params).json()
    # print(resps)
    # 上座率数据缺省值这么使用数据
    data_avgSeatView = jsonpath.jsonpath(resps, '$..avgSeatView')
    # print(data_avgSeatView)
    # 场均人次
    data_avgShowView=jsonpath.jsonpath(resps,'$..avgShowView')
    # 票房占比
    data_boxRate=jsonpath.jsonpath(resps,'$..boxRate')
    # 电影名称
    data_name=jsonpath.jsonpath(resps,'$..movieName')
    # 上映时间
    data_time=jsonpath.jsonpath(resps,'$..releaseInfo')
    # 综合票房
    data_sumBoxDesc=jsonpath.jsonpath(resps,'$..sumBoxDesc')
    # 排片场次
    data_showCount=jsonpath.jsonpath(resps,'$..showCount')
    # 排片占比
    data_showCountRate=jsonpath.jsonpath(resps,'$..showCountRate')
    data={'电影名称':data_name,'上映时间':data_time,'上座率':data_avgSeatView,'场均人次':data_avgShowView,
                     '票房占比':data_boxRate,'综合票房':data_sumBoxDesc,'排片场次':data_showCount,'排片占比':data_showCountRate}
    df = pd.DataFrame(pd.DataFrame.from_dict(data, orient='index').values.T, columns=list(data.keys()))
    print(df)
    df.to_csv("猫眼电影1.csv",index=False,encoding='utf-8')

通过DataFrame输出到控制台我们可以看到爬取成功。
在这里插入图片描述

可视化分析

import pandas as pd
data=pd.read_csv("猫眼电影1.csv")

在这里插入图片描述

数据缺省值处理

# 去除空值
data.dropna(inplace=True)
data

在这里插入图片描述

猫眼电影上座率前10分析

data_sorted = data.sort_values(by='上座率', ascending=False)
data_top10=data_sorted.head(10)
data_top10

在这里插入图片描述

data_top10['电影名称'].tolist()

在这里插入图片描述

percentage=data_top10['上座率'].tolist()
data_shangan=[percentage.replace("%", "") for percentage in percentage]
data_shangan

在这里插入图片描述

from pyecharts.charts import Bar,Line,Map,Page,Pie  
from pyecharts import options as opts 
from pyecharts.globals import SymbolType
from pyecharts.charts import Bar
# from pyecharts.charts import opts
#条形图  
#bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar1 = Bar() 
bar1.add_xaxis(data_top10['电影名称'].tolist())
bar1.add_yaxis('', data_shangan) 
bar1.set_global_opts(title_opts=opts.TitleOpts(title='猫眼电影上座率前10分析'),
                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                     visualmap_opts=opts.VisualMapOpts(max_=28669)
                    ) 

bar1.render_notebook()

在这里插入图片描述

猫眼电影票房场均人次前10分析

data_sum = data.groupby('电影名称')['场均人次'].sum().sort_values(ascending=False)
data_sum[:10]

在这里插入图片描述

bar3 = Bar() 
bar3.add_xaxis(data_sum[:10].index.tolist())
bar3.add_yaxis('', data_sum[:10].values.tolist())
bar3.set_global_opts(title_opts=opts.TitleOpts(title='猫眼电影票房场均人次前10分析'),
                     visualmap_opts=opts.VisualMapOpts(max_=900)) 
bar3.render_notebook()

在这里插入图片描述

猫眼电影票票房占比分析

data_pf= data.groupby('电影名称')['票房占比'].sum().sort_values(ascending=False)
data_pfzb=data_pf.tail(24)
data_pfzb.head(10)

在这里插入图片描述

data_pftop10 =  [list(z) for z in zip(data_pf.index.tolist(), data_pf.values.tolist())]

# 绘制饼图
pie1 = Pie()
pie1.add('', data_pftop10, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='猫眼电影票票房占比分析'), 
                     legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
pie1.render_notebook() 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/553587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

注塑机自动喷雾程序 报警自动关机

/***参数设置,开模数计数,秒脉冲计时***************/ /***实现功能:检测报警信号,脱模剂开模数计数信号***/ /***参数:1:脱模剂开模数 2:喷雾时间 3:延时时间 ***/ /***串口接收触摸屏参数设置字符串,接收并保存******/ /***端子输入口读开模数,比较设定值后输出到电磁阀**/ /…

Emmet表达式

目录 Emmet语法简介 Emmet作用 Emmet在HTML中的使用 Emmet在CSS中的使用 Emmet语法简介 Emmet语法的前身是Zen coding,它使用缩写,来提高HTML的编写速度,VScode内部已经集成该语法。 Emmet作用 快速生成HTML结构语法快速生成CSS样式语法 Emmet在HTML中的使用…

python连接数据库失败怎么解决

Python 连接数据库失败怎么解决? 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。…

Vue_管道符“|”(单竖线)的用处

目录 1、管道符是什么 2、应用场景 背景:项目中偶遇在 {{ }} 插值表达式里用了 “|”此写法,一开始误以为是写错了,应该是写成 “||” 双竖线( 逻辑或运算符 ),结果询问…

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现,创造出震撼的视觉作品。但是,高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源,有效提高了渲染的速度和效率,…

DRF 序列化类serializer单表

【五】序列化类serializer单表 【1】主要功能 快速序列化 将数据库模型类对象转换成响应数据,以便前端进行展示或使用。这些响应数据通常是以Json(或者xml、yaml)的格式进行传输的。 反序列化之前数据校验 序列化器还可以对接收到的数据进行…

学习 Rust 的第六天:所有权问题

大家好, 欢迎来到学习 Rust 的第 6 天,过去 5 天我们学到的内容在几乎每种语言中都是一样的。所有权是 Rust 的一个独特概念。 介绍 所有权是一种独特的内存管理系统,其中每个值都有一个指定的所有者,在所有者超出范围时自动释…

java实现wav的重采样

原因是之前写的TTS文件,需要指定采样率和单声道 但是TTS是用的Jacob调用COMsapi实现的 javaWNI10JACOB方式 SAPI底层支持的是C,C#【官方文档】 SpAudioFormat SetWaveFormatEx method (SAPI 5.4) | Microsoft Learn 用C实现的方式【可指定输出的WAV…

算法练习第19天|222.完全二叉树的节点个数

222.完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣(LeetCode)https://leetcode.cn/problems/count-complete-tree-nodes/description/ 题目描述: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。题目数据保…

【Python】穿越Python的迭代之旅:while,for 循环的奇妙世界

欢迎来到CILMY23的博客 本篇主题为: 穿越Python的迭代之旅:while,for 循环的奇妙世界 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给个一键三连&…

spring的redis注解@Cacheable @Cacheput @CacheEvict的condition、unless

概述 redis的注解使用的过程中总会遇到condition和unless这两个属性,而且不同的注解使用注意事项不一样。本人也是错误使用之后详细查询了一下,作了如下的总结。 Cacheale 这个注解的使用和意义这里不多说,可以查看我的其他文档。这里主要说…

【C++】二维数组传参方式

最近刚开始刷剑指offer,刚做到第三题的时候,发现C二维数组的传参方式和C语言略有些不同,所以在这篇博客中,会列出C/C常见的二维数组传参方式。(本方式和代码都是基于vs环境所编写) 一.C语言二维数组传参方式…

18.读取指定目录下的txt文档时,调用另外一个python文件

1.题目 遍历4K_phone和4K_VR目录下的所有txt文件,并将它们的内容合并到一个名为4k_decoding.txt的文件中。 但是,假设你有一个名为another_script.py的Python文件,你想在合并txt文件之前执行它生成要处理的txt文档。 最后统计完原始的txt文件…

算法与数据结构要点速学——通用 DS/A 流程图

通用 DS/A 流程图 这是一个流程图,可以帮助您确定应该使用哪种数据结构或算法。请注意,此流程图非常笼统,因为不可能涵盖每个场景。 请注意,此流程图仅涵盖 LICC 中教授的方法,因此排除了像 Dijkstra 等更高级的算法。…

eclipse配置SVN和Maven插件

3、 安装SVN插件 使用如下方法安装 Help–Install New Software 注意:目前只能安装1.8.x这个版本的SVN,如果使用高版本的SVN,在安装SVN和maven整合插件的时候就会报错,这应该是插件的bug。 点击Add name: subclipse location…

区块链知识总结——比特币中的密码学原理

比特币中的密码学原理: 比特币的本质:crypto-currency. 比特币用到密码学中的两个功能: 1.哈希函数(cryptographic hash function) 三个重要性质: (1)抗碰撞性collison resista…

3 xgboost

目录 1 定义 1.1 模型定义 1.2 损失函数 1.3 化简损失函数 xgboost比赛以及工程利器。目前存在大量有关算法文档。 XGBoost(eXtreme Gradient Boosting)是一种基于决策树集成的机器学习算法,被广泛应用于分类、回归和排名等任务。XGBoost…

vue快速入门(三十)vue的工程化开发安装配置

步骤很详细,直接上教程 上一篇 新增内容 安装nodejs安装脚手架工具安装vue项目运行项目服务退出项目服务 安装nodejs 没安装的友友可以参考这位大神的博文Node.js下载安装及环境配置教程【超详细】 安装脚手架工具 打开管理员cmd 输入此命令行npm i -g vue/cli …

access多表关联提示:语法错误(操作符丢失)在查询表达式中

在access数据库中执行多表关联时提示了一个错误 select * from Patient a inner join BioMain b on a.BioIDb.BioID inner join BioResult c on b.BioIDc.BioID where len(a.PatientID)>12 and b.AddTime>#2024-04-17 05:53:23# and b.AddTime<#2024-04-17 17:53:23#…

ASP.NET基于Web Mail收发系统设计与开发

摘 要 互联网络技术的不断发展&#xff0c;电子邮件服务已经成为人们基本的信息交互手段&#xff0c;也是网络服务中最早和最基本的服务之一。传统邮件系统大多是基于C/S结构&#xff0c;如Lotus notes、Microsoft Exchange Server等&#xff0c;这些邮件系统占用相对较多的服…