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


欢迎关注 『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爬虫』 专栏,持续更新中
『未完待续』


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值