【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

今日主题

如何用Python解析vip电影。

什么是vip电影?

这些vip电影啊,想要观看的话,必须充值会员,否则没法看。

比如这个:

这些vip电影解析后呢?

不需要会员,不需要登录,可以直接观看。

比如,正确解析后如下:

话不多说,我们直接开整!

准备工作

环境使用

Python 3.10 (不一定3.10,只要不是Python2就行)

Pycharm

模块使用

requests >>> pip install requests

为了让大家更好的学会这个案例,已经把源码打包好了,方便大家使用,给你们直接做成exe了

仅限于学习使用,请勿商用哈

由于篇幅限制,无法展示完整代码,我直接将代码打包上传,安全无毒,100%免费,可在下方获取!

案例实现的基本流程

一、数据来源分析

1.明确需求

明确采集的网站以及数据内容

网址:几大播放器懂的都懂数据: 视频内容 (链接)

2.抓包分析

通过浏览器开发者工具分析对应数据位置

pc端: 网页浏览器自带开发者工具抓包分析

app: 利用第三方抓包工具去分析数据位置

打开开发者工具 F12 / 右键点击检查选择network(网络)刷新网页让本网页的数据内容重新加载一遍通过关键字搜索找到对应数据位置通过链接中一段进行搜索关键字: 需要什么数据就搜什么数据

项目对于视频网站数据采集

开发者工具 -> 网络 -> 媒体文件 -> 对应视频链接

数据包地址: https://www.kuaishou.com/graphql

二、代码实现步骤

1.发送请求

模拟浏览器对于url地址发送请求

模拟浏览器

一种简单反反爬手段: 相关参数内容可以复制

-开发者工具 -> 网络 -> 点击对应数据包 -> 标头 -> 请求标头

代码格式: 字典形式

-需要构建完整的键值对

字典形式:

dit = {'key': 'value', 'key1': 'value1'}

-key键

-value值

'key': 'value' 键值对

请求网址

刚刚通过抓包分析找到链接地址

发送请求

一般情况: 使用第三方模块 requests请求方法: 在对应数据包中 -> 标头 -> 常规 -> 请求方法POST请求参数:POST请求: 需要传递表单数据 (载荷中查看)

2.获取数据

获取服务器返回响应数据response.text

获取响应文本数据 -> 字符串

一般情况在获取网页源代码的时候

response.json()

获取响应json数据 -> 字典

必须是完整的json数据格式

response.content

获取响应二进制数据 -> 二进制

一般用于获取图片/视频/音频/特定格式文件… 数据内容的时候

采集视频: 视频地址

对于视频地址发送请求 -> 获取二进制数据进行相关数据保存

3.解析数据

提取我们需要的数据内容字典取值

一般获取json数据, 可能存在多层嵌套

dit = {'key': 'value', 'key1': 'value1'}

json = {'A': '1', 'B': {'B1': '2', 'B3': '3'}}

键值对取值: 根据冒号左边的内容[键], 提取冒号右边的内容[值]

一层一层提取

比如提取数字3: json['B']['B3'] -> '3'

4.保存数据

获取视频内容, 进行本地保存

相对路径: 相当于代码所在文件路径 -> video 代码文件目录video文件夹

绝对路径: c盘->文件夹->那个文件路径

三、代码展示

# 导入数据请求模块

import requests

# 导入文件操作模块

import os

# 定义文件夹名字

file = 'video'

# 判断文件夹是否存在

if not os.path.exists(file):

# 创建文件夹

os.mkdir(file)

"""发送请求"""

# 模拟浏览器

headers = {

# User-Agent 用户代理, 表示浏览器基本上身份信息

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'

}

for page in range(28):

try:

# 请求网址

url = 'https://www.kuaishou.com/graphql'

# 请求参数

data = {"operationName":"visionTubeEpisodeQuery","variables":{"tubeId":"5x4jwip27r8g6wg","episodeNumber":page,"page":"theater","channelId":0},"query":"fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionTubeEpisodeQuery($tubeId: String, $episodeNumber: Int, $page: String, $channelId: Int, $webPageArea: String) {\n visionTubeEpisode(tubeId: $tubeId, episodeNumber: $episodeNumber, page: $page, channelId: $channelId, webPageArea: $webPageArea) {\n ...feedContent\n result\n status\n __typename\n }\n}\n"}

# 发送请求

response = requests.post(url=url, json=data, headers=headers)

"""获取数据"""

# 获取响应的json数据

json_data = response.json()

"""解析数据"""

# 提取视频链接

video_url = json_data['data']['visionTubeEpisode']['photo']['photoUrl']

# 提取短剧名

title = json_data['data']['visionTubeEpisode']['tags'][2]['name']

print(title)

print(video_url)

"""保存数据"""

# 获取视频内容

video_content = requests.get(url=video_url, headers=headers).content

# 数据保存 w写入数据覆盖 b二进制 wb二进制保存 ()

with open('video\\' + title + str(page) + '.mp4', mode='wb') as f:

# 写入数据

f.write(video_content)

except:

pass

由于篇幅限制,无法展示完整代码,我直接将代码打包上传,安全无毒,100%免费,可在下方获取!

​​

相关推荐

夜杭州十大“打卡点
365bet下注

夜杭州十大“打卡点

📅 07-04 👁️ 4723
中国02世界杯征程(揭秘中国队在2002年世界杯上的表现,逐场比赛激情回顾)
剑网3七秀PVP攻略 七秀PVP怎么玩
365bet娱乐场官网备用

剑网3七秀PVP攻略 七秀PVP怎么玩

📅 08-08 👁️ 3699