『python爬虫』13. 视频地址防盗链实战案例(保姆级图文)

news2025/1/16 8:03:50

目录

    • 1. 寻找视频真实url地址(视频地址被加密了)
    • 2. 防盗链中的来源判断
    • 完整代码
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 寻找视频真实url地址(视频地址被加密了)

视频原来的地址
https://www.pearvideo.com/video_1721605

在这里插入图片描述
XHR筛选请求服务器的抓包,发现了我们这边的视频url地址,但是访问后报错404,说明我们的url不对
在这里插入图片描述
我们检查元素搜索关键字mp4,在html中找到我们的视频的url
在这里插入图片描述

https://www.pearvideo.com/video_1721605(视频地址)
https://video.pearvideo.com/mp4/adshort/20210227/1679731371809-15617918_adpkg-ad_hd.mp4(请求中的src地址)
https://video.pearvideo.com/mp4/adshort/20210227/cont-1721605-15617918_adpkg-ad_hd.mp4(视频mp4地址)

分析结构研究如何把srcurl变成视频的真实地址,1721605是视频的一个编号,1679731371809是当前的系统时间戳。其他内容的格式是固定的,我们做好响应的转化即可。
在这里插入图片描述

srcUrl = dic['videoInfo']['videos']['srcUrl']
print("srcUrl:"+srcUrl)
systemTime = dic['systemTime']#1679731371809 #当前系统时间
print("systemTime:"+systemTime)
srcUrl = srcUrl.replace(systemTime, f"cont-{contId}")#当前系统时间替换为cont-{contId}, 得到最终的视频实际地址
print("视频实际地址"+srcUrl)

2. 防盗链中的来源判断

我们上面的代码仍然无法爬取到信息,因为网站对于我们的访问来源有所限制,简单来说,网站要求要想访问视频下载地址必须先访问视频页面,必须是从视频页面跳转到视频下载地址。那么我们就修改请求头,在请求头中加入视频的url即可Referer参数。
在这里插入图片描述

url = "https://www.pearvideo.com/video_1721605"
#print(url.split("_"))# ['https://www.pearvideo.com/video', '1721605']
contId = url.split("_")[1]# 1721605

# 请求获得视频实际地址的接口url
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}"

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36",
    # 防盗链: 溯源, 当前本次请求的上一级是谁
    "Referer": url
}

resp = requests.get(videoStatusUrl, headers=headers)

完整代码

# 1. 拿到contId
# 2. 拿到videoStatus返回的json. ->  srcURL
# 3. srcURL里面的内容进行修整
# 4. 下载视频
import requests

# 拉取视频的网址
from torch._appdirs import system

url = "https://www.pearvideo.com/video_1721605"
#print(url.split("_"))# ['https://www.pearvideo.com/video', '1721605']
contId = url.split("_")[1]# 1721605

# 请求获得视频实际地址的接口url
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}"

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36",
    # 防盗链: 溯源, 当前本次请求的上一级是谁
    "Referer": url
}

resp = requests.get(videoStatusUrl, headers=headers)
dic = resp.json()
#
# 真实mp4地址:
# https://video.pearvideo.com/mp4/adshort/20210227/cont-1721605-15617918_adpkg-ad_hd.mp4
srcUrl = dic['videoInfo']['videos']['srcUrl']
print("srcUrl:"+srcUrl)
systemTime = dic['systemTime']#1679731371809 #当前系统时间
print("systemTime:"+systemTime)
srcUrl = srcUrl.replace(systemTime, f"cont-{contId}")#当前系统时间替换为cont-{contId}, 得到最终的视频实际地址
print("视频实际地址"+srcUrl)
# 下载视频
with open("下载得到的视频.mp4", mode="wb") as f:
    f.write(requests.get(srcUrl).content)


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


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

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

相关文章

【刷题笔记】不要二+把字符串转换为整数

一、不要二 题目: 牛客网链接:不要二_牛客题霸_牛客网 描述 二货小易有一个W*H的网格盒子,网格的行编号为0~W-1,网格的列编号为0~H-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对…

camunda表达式如何使用

在Camunda中,表达式是一种灵活的方式,可以用于在流程定义和表单中计算和处理数据。表达式可以在Camunda的各个环节中使用,例如服务任务、网关、表单、条件等。 以下是Camunda表达式的一些常见用途: 1、计算值:表达式可…

腾讯云轻量16核32G28M带宽服务器CPU流量性能测评

腾讯云轻量16核32G28M服务器3468元15个月,折合每月231元,28M公网带宽下载速度峰值可达3584KB/s,折合3.5M/秒,系统盘为380GB SSD盘,6000GB月流量,折合每天200GB流量。腾讯云百科来详细说下腾讯云轻量应用服务…

SeaweedFS学习笔记:架构和快速入门

目录 1. 介绍1.1 Components1.2 Master 服务1.3 Volume 服务1.4 Filer服务1.5 S3服务1.6 Volume的概念1.7 Collection的概念 2. 快速入门2.1 安装 SeaweedFS2.2 启动 Master 服务2.3 启动 Volume 服务2.4 快速启动一个Master服务和一个Volume服务2.5 测试 3. 参考 1. 介绍 1.1 …

asp.net汽车保养美容店维修管理系统

本系统汽车预约美容系统分为前台和后台两部分,具体功能如下 前台部分功能 1.注册登录,用户通过注册登录之后可以进行保养和美容项目的预约 2.新闻资讯,查看和汽车保养,美容相关的新闻资讯信息 3.美容查看,查看汽车美容…

6年测开经验,从功能测试到测试开发,每一步都深思熟虑...

蓦然回首,软件测试风风雨雨的这几年,起初每天的工作只是鼠标点点点,我还真不知道怎么办,闲的时候真的怀疑自己的存在价值,每天拿着7000的工资,飘荡在繁华的深圳,吃不饱也饿不死,未来…

【PWN · ret2libc】ret2libc1

ret2libc的第一题 目录 前言 一、动态链接 二、ret2libc原理 三、exp编写 干货 干货一:python下的ELF 干货二:strings看看有没有待选字符串 编写exp 总结 前言 本来是和学习ret2text\ret2shellcode\ret2syscall一样在网上找文字资源&#x…

28从零开始学Java之面向对象和面向过程到底有哪些区别?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 壹哥相信,经过你对前面文章中技术点的学习,现在的你应该已经对Java具备了初步…

【UE】直升机沿样条线移动

效果 步骤 1. 将虚幻商城中的免费资产导入工程 下载完毕后可以看到如下文件 2. 新建一个Actor蓝图类,命名为“Track”,这个蓝图就是用来画样条线的 打开“Track”,添加样条组件 3. 打开“BP_West_Heli_AH64D” 在事件图表中先新建一个时间轴…

Unity冷知识:读取用户输入应该写在Update还是FixedUpdate里?

Unity冷知识:读取用户输入应该写在Update还是FixedUpdate里? 版权声明: 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明文章内容,不得删减、修改、演绎相关学习资源见文末 一些人…

1.SpringCloud技术

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

初识C++之线程库

目录 一、C中的线程使用 二、C的线程安全问题 1. 加锁 2. 变为原子操作 3. 递归里面的锁 4. 定时锁 5. RAII的锁 三、条件变量 1. 为什么需要条件变量 2. 条件变量的使用 2.1 条件变量的相关函数 2.2 wait函数 一、C中的线程使用 线程的概念在linux中的线程栏已经…

9个加密货币交易所被查封,交易所安全审计后仍不安全

美国联邦调查局和乌克兰警方查封了九个加密货币交易网站,这些网站为包括勒索软件参与者在内的诈骗者和网络犯罪分子洗钱提供了便利。 联邦调查局 FBI 在其公告中表示,该行动是在虚拟货币响应小组、乌克兰国家警察和该国法律检察官的帮助下进行的。 此次…

ai皮带跑偏撕裂监测算法 yolov7

ai皮带跑偏撕裂监测系统算法基于yolov7网络模型人工智能视觉技术,ai皮带跑偏撕裂监测算法模型自动识别现场画面中传送皮带撕裂、跑偏、偏移等情况,立即告警抓拍存档同步回传后台。YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图…

Git入门学习

Git是什么? 是一种免费开源的分布式版本控制系统,区别于集中式挂历系统(SVN,CVS)的是分布式每人都有一个“档案馆”,而集中式是只有一个“档案馆”。 这样的话,如果你使用git进行开发,感觉自己…

多层PCB层叠结构

在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4层,6层,还是更多层数的电路板。确定层数之后,再确定内电…

全景丨0基础学习VR全景制作,平台篇第18章:热点功能-音频

大家好,欢迎观看蛙色VR官方——后台使用系列课程! 功能说明 应用场景 热点,指在全景作品中添加各种类型图标的按钮,引导用户通过按钮产生更多的交互,增加用户的多元化体验。 音频热点,即点击热点后会直接播…

低代码开发重要工具:jvs表单动态字段配置方式

在表单中常常会有动态字段的场景,也就是如下图所示,根据一个字段的内容选项去控制另外字段的内容展示 配置的思路:根据第一个单选框选择的内容,通过关联筛选的方式去选择第二个单选框的内容,那么第二个单选框的物理存储…

K8s基础7——DaemonSet控制器、Job批处理调度、Cronjob定时调度

文章目录 一、DaemonSet二、Job三、Cronjob 一、DaemonSet 控制器介绍: DaemonSet 可以确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会给这新节点新增一个 Pod 。当有节点从集群移除时,此节点…

redis最大连接数查询与设置

redis客户端连接数 redis通过监听一个TCP端口或socket的方式接收来自客户端的连接, 当与客户端建立连接后,redis内部会进行如下操作: (1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模…