涉及知识:
异步请求,requests,字典,json,切片,io写入等知识
分析案例:
梨视频内的视频加载并不是直接在源码文件内放有视频的链接地址,而是用户在通过点击播放视频按钮后再次通过请求一个链接而得到真实的视频链接地址,所以要找到改变链接的规律进而修改链接 ,最后下载到视频
分析网页:
初次打开网页视频后发现并没有视频的链接,当点播放后才有视频的链接出现
发现视频是通过这个文件再次执行后才会在网页中加载出视频链接
通过分析后发现是将异步文件下的srcUrl 中的systemurl改为contid了
编写程序
步骤+思路:
1):
- 首先获取conitid
- 拿到videostatus返回的json 格式的 srcURL
- 对srcUrl进行整理
- 下载视频
2):
上车程序:
import requests,json
# https://video.pearvideo.com/mp4/adshort/20211216/cont-1747985-15806070_adpkg-ad_hd.mp4 处理后真正视频的播放地址
# https://www.pearvideo.com/videoStatus.jsp?contId=1747985&mrd=0.42134749277801786 处理后的获取异步请求的地址
url = "https://www.pearvideo.com/video_1747985" #视频页面网址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
#防盗链,溯源用的,在爬取网站时要注意某些网站会溯源
"Referer": url,
}
contid = url.split("_")[1]
videoStatusurl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contid}&mrd=0.03454181123024158"
video_json = requests.get(videoStatusurl,headers=headers)
#将获取到的异步请求文件输出位json格式
dic = video_json.json()
srcUrl = dic["videoInfo"]["videos"]["srcUrl"] #获取json格式中的srlUrl
systemTime = dic["systemTime"] #获取json格式中的systemTime
srcUrl = srcUrl.replace(systemTime , f"cont-{contid}") #将异步请求中的url内systemtime替换为contid,更换后就是真正的下载地址了
print(srcUrl )
#下载视频
with open("a.mp4", mode="wb") as f :
f.write(requests.get(srcUrl).content)
print("over!!!!!!")