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,一经查实,立即删除!

相关文章

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

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

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

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

设计模式—装饰模式

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

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

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

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

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

STM32----HAL库函数

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

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

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

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

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

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

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

配电室综合监测系统

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

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

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

10天玩转Python第10天:python unittest框架 全面详解与代码示例

目录 1.unittest 组成2.断言3.参数化4.测试报告 今日内容 unittest 框架的组成 TestLoaderFixture 断言跳过(某些用例由于某些原因不想执行)参数化测试报告 ​​​​ 1.unittest 组成 TestLoader (测试加载) TestLoader (测试加载), 作用和 TestSuite 的作用是一样的, 对 T…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展,各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用,帮助构建协同共享、高效的统一智慧管理平台,为高速公路的…

内网BUG管理系统本地部署并结合内网穿透实现异地远程访问

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

app上架-.您的应用在首次打开或运行中,未见使用权限对应的相关功能或服务时,提前向用户弹窗申请开启【已安装应用列表】权限,不符合华为应用市场审核标准。

上架提示 您的应用在首次打开或运行中,未见使用权限对应的相关功能或服务时,提前向用户弹窗申请开启【已安装应用列表】权限,不符合华为应用市场审核标准。 测试步骤:首次打开APP,在首页页面,非服务所必须…

实验4.1 静态路由的配置

实验4.1 静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.设置交换机和路由器的基本配置。2.使用display ip interface brief命令查看接口配置信息。3.配置静态路由,实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

钡铼无线R10A工业级路由器在工业机器人领域的创新应用

随着工业机器人的普及&#xff0c;对于高可靠性和高稳定性的网络接入设备的需求也越来越大。传统的有线网络虽然稳定&#xff0c;但在现场布置和维护上面临很多困难&#xff0c;而无线网络虽然方便&#xff0c;但受到信号干扰和传输距离限制等问题的影响。如何解决这些问题&…

解决 Hbuilder打包 Apk pad 无法横屏 以及 H5 直接打包 成Apk

解决 Hbuilder打包 Apk pad 无法横屏 前言云打包配置 前言 利用VUE 写了一套H5 想着 做一个APP壳 然后把 H5 直接嵌进去 客户要求 在pad 端 能够操作 然后页面风格 也需要pad 横屏展示 云打包 配置 下面是manifest.json 配置文件 {"platforms": ["iPad"…

优优嗨聚集团美团代运对外卖市场的影响与作用

随着互联网的普及和消费者对便捷生活需求的增加&#xff0c;外卖市场逐渐成为人们日常生活中不可或缺的一部分。在这个竞争激烈的市场中&#xff0c;美团代运作为外卖配送领域的佼佼者&#xff0c;对外卖市场产生了深远的影响。本文将探讨美团代运对外卖市场的作用&#xff0c;…