一、分析
- 要在地址https://www.pearvideo.com/video_1747820中下载视频,首先要找打视频的源地址,查看源代码未发现有源代码,
- 在元素中找,视频播放的时候,在<video>标签中找下载链接
注意:视频不播放,是看不到视频源地址的,把视频下载地址单独复制下来如下
src="https://video.pearvideo.com/mp4/short/20220815/cont-1766738-15916335-hd.mp4
3、F12网络查看请求url情况
4、返回的数据情况,里面有一个srcURL地址,此时复制地址到浏览器中请求,并不是视频
5、对比视频请求链接数据情况:发现只有中间部分参数不一样,其余都是一样的,正常情况应该是只要把中间的参数部分替换就可以
真实视频链接 src="https://video.pearvideo.com/mp4/short/20220815/cont-1766738-15916335-hd.mp4
通过发送请求链接 https://www.pearvideo.com/videoStatus.jsp?contId=1766738&mrd=0.36519232701361704
返回数据中包含链接 https://video.pearvideo.com/mp4/short/20220815/1705219740381-15916335-hd.mp4
二、代码编写
1、从上面分析得到,请求链接部分只有cont-xxxx这部分不同,先获取xxxx这部分的值
base_url = "https://www.pearvideo.com/video_1747820" contId = base_url.split("_")[1] print(contId) #1747820
2、重组地址,把cont-id替换到下面的请求地址的id部分
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.36519232701361704" print(videoStatusUrl) #https://www.pearvideo.com/videoStatus.jsp?contId=1747820&mrd=0.36519232701361704
理论来说:此时已经拿到了视频的请求的真实链接了,再对链接发送请求就可以拿到视频
但是,此时视频并未下线,在网页中还能正常打开并观看 ?????????????
原因是一个Referer的参数值:这里值的作用是防盗链的功能:即请求链接的时候,要溯源上到一步
三、完整代码:
import time import requests base_url = "https://www.pearvideo.com/video_1747820" contId = base_url.split("_")[1] headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", #防盗链,追溯本次请求的上一级是谁 "Referer":base_url } proxies = { 'http': '127.0.0.1:1212', 'https': '127.0.0.1:1212' } #发送请求 videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.36519232701361704" resp = requests.get(url=videoStatusUrl,headers = headers,proxies = proxies,timeout = 10) dict = resp.json() src_URL = dict['videoInfo']['videos']['srcUrl'] #https://video.pearvideo.com/mp4/adshort/20211214/1705221754081-15805223_adpkg-ad_hd.mp4 systemTime = dict['systemTime'] #1705221754081 #需要把src_Url地址中的1705221754081换成contId的值即可 new_url = src_URL.replace(systemTime,f"contId={contId}") #下载视频 with open("a.mp4",mode='wb')as f: f.write(requests.get(new_url,headers).content) print("视频下载完成!!")
四、总结
本以为完事大吉了,结果。。。。。
报错:requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054,“远程主机强迫关
又根据博主的已解决requests.exceptions.ConnectionError: (‘Connection aborted .’, ConnectionResetError(10054,“远程主机强迫关_requests.exceptions.connectionerror: ('connection -CSDN博客来操作了几次,还是没有解决,
又报了一个新的错误:
标签:pearvideo,视频,爬虫,mp4,https,contId,com,下载 From: https://www.cnblogs.com/zp513/p/17963766