python采集电影数据JS逆向, 并制作可视化

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

  • Python 3.10

  • Pycharm

  • nodejs

模块使用:

  • requests -> pip install requests

  • execjs -> pip install pyexecjs

  • json

  • csv

模块安装:

win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)

实现爬虫流程:

一. 数据来源分析

1. 明确需求: 明确采集的网址以及数据内容- 网址: https://www.endata.com.cn/BoxOffice/BO/Year/index.html- 数据: 电影数据
2. 抓包分析: 通过开发者工具(浏览器自带)进行分析- 打开开发者工具: F12 / 右键点击检查选择network (网络)- 选择任意年份: 让它加载对应的数据内容查看返回的数据内容:请求网址: https://www.endata.com.cn/API/GetData.ashx请求方式: POST (需要向服务器提交表单数据)请求头: (是否有加密参数)请求参数:year: 2023MethodName: BoxOffice_GetYearInfoData响应数据:密文内容 (加密内容)- 对于加密的数据, 进行解密分析加密规则, 如何解密 (查看启动器)断点目的: 刷新网页 / 翻页时候, 网页运行到这个地方可以暂停住传入了什么参数, 返回了什么内容

二. 代码实现步骤

1. 发送请求 -> 模拟浏览器对于url地址发送请求
2. 获取数据 -> 获取服务器返回响应数据获取密文数据 -> 解密
3. 解析数据 -> 提取我们数据内容
4. 保存数据 -> 保存数据

数据采集

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入数据请求模块: 需要安装 pip install requests
import requests
# 需要安装 pip install pyexecjs
import execjs
# 导入json模块
import json
# 导入csv模块
import csv

“”“保存数据”“”

# 创建文件对象
csv_file = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(csv_file, fieldnames=['影片名称','类型','总票房','平均票价','场均人次','国家地区','上映时间',
])
csv_writer.writeheader()

“”“1. 发送请求 -> 模拟浏览器对于url地址发送请求”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 模拟浏览器
headers = {# User-Agent 用户代理 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
for year in range(2008, 2024):# 请求网址url = 'https://www.endata.com.cn/API/GetData.ashx'# 请求参数data = {'year': year,'MethodName': 'BoxOffice_GetYearInfoData'}# 发送请求response = requests.post(url=url, data=data, headers=headers)

“”“2. 获取数据 -> 获取服务器返回响应数据”“”

    content = response.textprint('密文数据: ', content)  # 查看是否得到数据内容"""解密数据- 通过JS代码变成明文数据 (分析解密数据代码位置)- 通过python代码调用js代码"""# 读取js代码f = open('demo.js', encoding='utf-8').read()# 编译js代码js_code = execjs.compile(f)# 调用js代码函数res = js_code.call('get_content', content)# 转成字典数据json_data = json.loads(res)print('明文数据: ', res)print(json_data)

“”“3. 解析数据 -> 提取我们数据内容”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''Table = json_data['Data']['Table']# for 循环遍历, 提取列表元素for index in Table:# 把数据保存到字典里面dit = {'影片名称': index['MovieName'],'类型': index['Genre_Main'],'总票房': index['BoxOffice'],'平均票价': index['AvgPrice'],'场均人次': index['AvgPeoPle'],'国家地区': index['Area'],'上映时间': index['ReleaseTime'],}# 写入数据csv_writer.writerow(dit)print(dit)

数据可视化

# 需要安装 pip install pandas
import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
# 读取文件
df = pd.read_csv('data.csv')
# 显示前5行数据
df.head()

可以直接通过pyechrats 官文文档 实现可视化分析

https://gallery.pyecharts.org/#/README
info = df['类型'].value_counts().index.to_list() # x轴的数据
num = df['类型'].value_counts().to_list() # y轴的数据
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Fakerc = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(# 设置标题title_opts=opts.TitleOpts(title="2008-2023年部分电影类型分布"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 把可视化图保存成html文件# .render("2008-2023年部分电影类型分布(饼图).html")
)
c.load_javascript()
c.render_notebook()

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
info = df['国家地区'].value_counts().index.to_list() # x轴的数据
num = df['国家地区'].value_counts().to_list() # y轴的数据
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(# 设置标题title_opts=opts.TitleOpts(title="2008-2023年部分电影国家地区分布"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 把可视化图保存成html文件# .render("2008-2023年部分电影类型分布(饼图).html")
)
c.render_notebook()

df.head()

Top = df[['影片名称', '总票房']].sort_values('总票房')[-10:]
name = list(Top['影片名称'])
num = list(Top['总票房'])
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(name).add_yaxis("", num).set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),title_opts=opts.TitleOpts(title="2008-2023年部分电影总票房Top10分布", subtitle=""),)# .render("bar_rotate_xaxis_label.html")
)
c.render_notebook()

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.如何做项目技术选型

目录 概述怎样做技术选型通讯协议选型编程语言选型数据库选型项目选型消息队列-RocketMQapi网关限流算法计数器算法滑动窗口算法漏桶限流算法熔断熔断器三态变化滑动窗口项目工程搭建

Node.js中npm中ws的WebSocket协议的实现

在Node.js中,ws是一个非常有用的模块,它提供了WebSocket协议的实现。WebSocket协议是一种在Web浏览器和服务器之间进行双向通信的协议,它可以使得Web应用程序更加交互式和实时。在本文中,我们将详细介绍npm中ws的内容。 ws是什么…

linux应用卡死(anr)并行堆栈dump方法

linux应用卡死(anr)并行堆栈dump方法 注意:不要杀进程,保持进程在运行 1、使用top或ps获取进程pid 2、使用gdb附加进程 gdb attach pid(进程号)3、保存堆栈到指定文件 set logging file xxx.txt(文件路径…

电流源输出的是直流电还是交流电(高精度电流源)

电流源是一种能够提供电流输出的电子设备,它可以产生直流电流或交流电流,具体取决于其设计和应用的需要。 首先,我们来讨论电流源输出直流电的情况。直流电是指电流的方向始终保持不变的电流形式。在一些特定的应用中,需要稳定的、…

【uniapp小程序-wesocket的使用】

创建一个Scoket.js class webSocketClass {constructor(url, time) {this.url urlthis.data nullthis.isCreate false // WebSocket 是否创建成功this.isConnect false // 是否已经连接this.isInitiative false // 是否主动断开this.timeoutNumber time // 心跳检测间隔…

gcc下printf输出内容有百分号(%)

最近学pwn的时候遇到一个很诡异的地方&#xff0c;之前也有但是没有管&#xff0c;今天要看一看了 #include <stdio.h> #include <stdlib.h> #include <unistd.h> char sh[]"/bin/sh"; int init_func(){setvbuf(stdin,0,2,0);setvbuf(stdout,0,2,…

【全志T113-i】OK113i-S开发板-适配10寸LCD显示

前言 本文介绍如何在OK113i-S开发板上适配一个自己的10寸LCD。 OK113i-S 是一个优秀的开发板&#xff0c;支持lvds 单8&#xff0c;双8显示&#xff0c;最大分辨率1280x800 也支持RG666显示&#xff0c;由于我手头只有lvds 单8&#xff0c;40pin的显示器&#xff0c;今天我就…

在Springboot项目中使用Quartz执行定时任务

所使用的jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>使用默认单机模式。单机模式中&#xff0c;Job 和Trigger是存放在内存中Map&#xff0c;通过源…

设计模式—装饰模式

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 装饰模式—穿衣服&#x1f48e;总结 装饰模式—穿衣服 装饰模式&#xff08;Decorator&#xff09;可以动态的给对象添加一些额外的职责。 Component是定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。…

C语言 typedef 和 #define 区别

typedef 和 #define 区别 typedef 仅限于数据类型&#xff0c;而不能是表达式或具体的值 #define 发生在预处理&#xff0c;typedef 发生在编译阶段 使用 typedef 给 函数指针类型 取别名 //语法&#xff1a; typedef int (*FuncPtr)(int, int);#include <stdio.h>typed…

Flutter ios 使用ListView 。滚动时 AppBar 改变颜色问题

在Ios 中 列表滚动条向下滚动一段距离后 会导致 AppBar 颜色改变 可以给 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 属性 全局&#xff1a; MaterialApp(theme: ThemeData(appBarTheme: AppBarTheme(scrolledUnderElevation: 0.0)) ) 局部&#xff1a; App…

代码随想录算法训练营第二十天 |654.最大二叉树 、 617.合并二叉树 、700.二叉搜索树中的搜索 、 98.验证二叉搜索树

今天学习内容&#xff1a;654.最大二叉树 、 617.合并二叉树 、700.二叉搜索树中的搜索 、 98.验证二叉搜索树 讲解&#xff1a;代码随想录 654.最大二叉树 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 最大二叉树的构建过程如上&#xff0c;图…

STM32----HAL库函数

1.STM32系统框架 1.1 Cortex-M内核&芯片 1.2 F1系统框架 4个主动单元4个被动单元 AHB&#xff1a;高级高性能总线 APH&#xff1a;高级外围总线 其中 1 为 主动单元 &#xff0c; 2为被动单元 总线时钟频率&…

低代码开发平台的优势及应用场景分析

文章目录 低代码是什么&#xff1f;低代码起源低代码分类低代码的能力低代码的需求市场需要专业开发者需要数字化转型需要 低代码的趋势如何快速入门低代码开发低代码应用领域 低代码是什么&#xff1f; 低代码&#xff08;Low-code&#xff09;是著名研究机构Forrester于2014…

充电器如何测试?有哪些测试参数?用电源模块自动化测试系统测试需要哪些步骤?

充电器测试参数 1. 输入、输出电压测试 通过万用表或者其它精密测试设备测量充电器的输入、输出电压测试&#xff0c;检测输入、输出电压是否在规定范围内&#xff0c;以免造成设备损坏。 2. 输入、输出电流测试 测试充电器的输入、输出电流&#xff0c;确保其符合设计要求&…

C 标准库 - <string.h>

1 C 标准库 - <string.h> 简介 string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。 1.1 库变量 下面是头文件 string.h 中定义的变量类型&#xff1a; 序号 变量 描述 1 size_t 这是无符号整数类型&#xff0c;它是 sizeof 关键字的结果。1.…

【AIGC重塑教育】AI大模型驱动的教育变革与实践

文章目录 &#x1f354;现状&#x1f6f8;解决方法✨为什么要使用ai&#x1f386;彩蛋 &#x1f354;现状 AI正迅猛地改变着我们的生活。根据高盛发布的一份报告&#xff0c;AI有可能取代3亿个全职工作岗位&#xff0c;影响全球18%的工作岗位。在欧美&#xff0c;或许四分之一…

数据库系统概论——复习资料

目录 一、概论 &#xff08;一&#xff09;数据库系统概述 &#xff08;二&#xff09;数据模型 &#xff08;三&#xff09;数据库系统的三级模式结构 &#xff08;四&#xff09;数据库系统的组成 二、关系数据库 &#xff08;一&#xff09;关系数据结构及形式化定义…

配电室综合监测系统

配电室综合监测系统是一种集成了自动化、智能化等技术手段的电力监控系统。它通过对配电室内的电力设备进行实时监控、数据分析和处理&#xff0c;能够提高电力设备的安全性和效率&#xff0c;及时发现并解决电力故障和潜在问题&#xff0c;保证电力系统的稳定运行。 该系统通常…

秒搜全网闲鱼商品!一键实现商品详情关键词搜索的酷炫电商API接口!

在如今的电商时代&#xff0c;商品搜索已经成为一个非常重要的功能。当用户在电商平台上浏览商品时&#xff0c;如果能够快速而准确地搜索到自己感兴趣的商品&#xff0c;无疑会提升用户的购物体验&#xff0c;进而增加平台的销售额。联讯数据将介绍一款名为“闲鱼商品秒搜API”…