目录
- 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爬虫』 专栏,持续更新中
『未完待续』