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

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


如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

环境使用:

  • 版 本: python 3.10

  • 编辑器:pycharm 2022.3.2

  • 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: 2023

      • MethodName: BoxOffice_GetYearInfoData

    • 响应数据:

      • 密文内容 (加密内容)
    • 对于加密的数据, 进行解密

      • 分析加密规则, 如何解密 (查看启动器)

      • 断点目的: 刷新网页 / 翻页时候, 网页运行到这个地方可以暂停住

      • 传入了什么参数, 返回了什么内容

二. 代码实现步骤
  1. 发送请求 -> 模拟浏览器对于url地址发送请求

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

    获取密文数据 -> 解密

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

  4. 保存数据 -> 保存数据

数据爬取代码

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和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地址发送请求"""
# 模拟浏览器
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. 解析数据 -> 提取我们数据内容"""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资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和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资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和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资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和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/241260.shtml

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

相关文章

【Git】在 IDEA 中合并多个 commit 为一个

文章目录 1 未提交到远程分支1.1 需求说明1.2 reset 操作1.3 再次 push 2 已经提交到远程分支2.1 需求说明2.2 rebase 操作2.3 强制 push 分两种情况: 一种是本地提交还没推到远程,这种好处理另一种是已经提交到远程分支,这个略麻烦 1 未提…

【接口测试】Postman(三)-变量与集合

一、变量 ​ 变量这个概念相信大家都不陌生,因此在这里我们不介绍了。主要说一下在Postman中有哪几类变量,主要包括以下四类: Global(全局) Environment(环境) Local(本地&#xf…

Linux中安装Maven3.6.1

一、安装及配置maven 1.下载maven安装包 首先需要切换到自己需要安装的目录 我自己是把配置都放到了:/usr/local/maven路径下 cd /usr/local/maven 下载maven安装包: wget https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven…

FreeRTOS信号量学习

目录 一、信号量的特性 1. 信号量的常规操作 2. 信号量跟队列的对比 3. 两种信号量的对比 4. 信号量函数 4.1 创建 4.2 删除 4.3 give/take 5. 使用二进制信号量来同步 6. 防止数据丢失 7. 使用计数型信号量 队列(queue)可以用于传输数据:在任务之间、任务和…

Linux多线程:线程池(单例),读写锁

目录 一、线程池(单例模式)1.1 makefile1.2 LockGuard.hpp1.3 log.hpp1.4 Task.hpp1.5 Thread.hpp1.6 ThreadPool.hpp1.7 main.cc 二、STL,智能指针和线程安全2.1 STL中的容器是否是线程安全的?2.2 智能指针是否是线程安全的? 三、其他常见的各种锁四、…

微服务之配置中心与服务跟踪

zookeeper 配置中心 实现的架构图如下所示,采取数据加载到内存方式解决高效获取的问题,借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度(kafka) 消息服务和事件的统一调度,常用用 kafka …

使用Java语言中的算法输出杨辉三角形

一、算法思想 创建一个名为YanghuiTest的类,然后创建二维数组,然后遍历二维数组的第一层,然后初始化第二层数组的大小,然后遍历第二层数组,然后将两侧的数组元素赋为1,然后其它数值通过公式计算,最后可以输…

Leetcode—1099.小于K的两数之和【简单】Plus

2023每日刷题&#xff08;六十八&#xff09; Leetcode—1099.小于K的两数之和 实现代码 class Solution { public:int twoSumLessThanK(vector<int>& nums, int k) {int n nums.size();int left 0, right n - 1;int sum 0;int ans 0;sort(nums.begin(), nums…

讲座思考 | 周志华教授:新型机器学习神经元模型的探索

12月22日&#xff0c;有幸听了南京大学周志华教授题为“新型机器学习神经元模型的探索”的讲座。现场热闹非凡&#xff0c;大家像追星一样拿着“西瓜书”找周教授签名。周教授讲得依旧循循善诱&#xff0c;由浅入深&#xff0c;听得我很入迷&#xff0c;故作此记。 周教授首先就…

conda环境下module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘问题解决

1 问题描述 在pycharm下&#xff0c;使用conda环境运行模型程序&#xff0c;调用matplotlib绘制图形&#xff0c;出现如下错误&#xff1a; Traceback (most recent call last):File "D:\code\cv\vgg16_cifar10.py", line 173, in <module>plt.xlabel(times)…

天文与计算机:技术的星辰大海

天文与计算机&#xff1a;技术的星辰大海 一、引言 在人类的历史长河中&#xff0c;天文学与计算机技术这两个领域似乎相隔甚远&#xff0c;然而在科技的推动下&#xff0c;它们却逐渐走到了一起&#xff0c;为人类对宇宙的探索开辟了新的道路。天文观测的复杂度与数据量随着…

【数据结构】最短路径算法实现(Dijkstra(迪克斯特拉),FloydWarshall(弗洛伊德) )

文章目录 前言一、Dijkstra&#xff08;迪克斯特拉&#xff09;1.方法&#xff1a;2.代码实现 二、FloydWarshall&#xff08;弗洛伊德&#xff09;1.方法2.代码实现 完整源码 前言 最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点…

Linux创建macvlan 测试bridge、private和vepa模式

Linux创建macvlan&#xff0c;测试bridge、private和vepa模式 最近在看Docker的网络&#xff0c;看到关于macvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 环境 操…

Vue如何请求接口——axios请求

1、安装axios 在cmd或powershell打开文件后&#xff0c;输入下面的命令 npm install axios 可在项目框架中的package.json中查看是否&#xff1a; 二、引用axios import axios from axios 在需要使用的页面中引用 三、get方式使用 get请求使用params传参,本文只列举常用参数…

山西电力市场日前价格预测【2023-12-24】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-24&#xff09;山西电力市场全天平均日前电价为324.41元/MWh。其中&#xff0c;最高日前电价为456.41元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

thinkphp+vue+mysql酒店客房管理系统 b1g8z

本系统包括前台界面、用户界面和管理员界面、员工界面。在前台界面里游客和用户可以浏览客房信息、公告信息等&#xff0c;用户可以预定客房&#xff0c;在用户中心界面里&#xff0c;用户可以管理预定信息&#xff0c;管理员负责用户预定的审核以及客房的发布、用户的入住等。…

PHP开发案例:用PHP写一个简单的蜘蛛统计代码

在前面的文章中我们已经学习了怎么来识别蜘蛛(搜素引擎的爬虫),现在我们来运用我们学习到的知识写一个简单的程序。当然你必须在你需要统计的页面引入spider.php,否则是无法统计到的哦! 一、spider.php <?php function spider(){ $spider=0;//首先定义蜘蛛的默认值为…

要参加微软官方 Copilot 智能编程训练营了

GitHub Copilot 是由 GitHub、OpenAI 和 Microsoft 联合开发的生成式 AI 模型驱动的。 GitHub Copilot 分析用户正在编辑的文件及相关文件的上下文&#xff0c;并在编写代码时提供自动补全式的建议。 刚好下周要参加微软官方组织的 GitHub Copilot 工作坊-智能编程训练营&…

操作系统——进程管理算法和例题

1、概述 1.1 进程调度 当进程的数量往往多于处理机的个数&#xff0c;出现进程争用处理机的现象&#xff0c;处理机调度是对处理机进行分配&#xff0c;就是从就绪队列中&#xff0c;按照一定的算法&#xff08;公平、髙效&#xff09;选择一个进程并将处理机分配给它运行&am…

图像识别中的 Vision Transformers (ViT)

引言 Vision Transformers (ViT) 最近已成为卷积神经网络(CNN) 的竞争替代品&#xff0c;而卷积神经网络 (CNN) 目前在不同的图像识别计算机视觉任务中处于最先进的水平。ViT 模型在计算效率和准确性方面比当前最先进的 (CNN) 模型高出近 4 倍。 Transformer 模型已成为自然语…