网络爬虫-梨视频下载

一、分析

  1. 要在地址https://www.pearvideo.com/video_1747820中下载视频,首先要找打视频的源地址,查看源代码未发现有源代码,
  2. 在元素中找,视频播放的时候,在<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博客来操作了几次,还是没有解决,

又报了一个新的错误:

 

posted @ 2024-01-14 17:06  zhang0513  阅读(49)  评论(0编辑  收藏  举报