爬虫--防盗链使用案例

本案例是抓视频网站里面的某个视频。

步骤是:

# 1.拿到contId
# 2.拿到videoStatus.jsp返回的json  ->  srcURL
# 3.srcURL里面的内容进行修整
# 4.下载视频

本次案例是用li视频作为防盗链案例的对象。

ba7d38cba18b4c7b9247a89d3ea6dddc.png

点开该视频以后会发现页面源代码与F12显示的代码并不一样。故需要在F12中选中XHR选项重新刷新一下页面,就会出现箭头所指的

41b7b23fc57641e1b1dcaea18f38732a.png

点开以后点开preview,preview中的srcUrl里面的跟视频链接很像,但是srcUrl里面的链接打开以后会是404,所以需要对比哪里不一样

4e9068e01c4b45738d713c349a7df49e.png

点开Headers箭头指的就是原视频链接888d52617b744532b0002aed2e1a7134.png

可以发现两个链接的url只有划线处不一样,所以只要提取到srcUrl里面的链接以后,将里面的划线处的数字换成cont-数字就好。可以发现划线处数字就是上述图片里面的systemTime,而cont-后面的数字是下图的contId,故只需提取到srcUrl里面的systemTime将其替换为contId就能获取到视频下载链接并将其下载到本地啦!63944b9098794bbb8a265f9d00cb9d21.png

87641f750ab64a3ba0c0d65e3f3f3eef.png

 

1.拿到contId

b4945f1daae64d15b57ce9b7a0d406fe.png

2.拿到videoStatus.jsp返回的json  ->  srcURL

videoStatusUrl是网页中videoStatus.jsp中headers里的url

36a8f646435d4d54a60b7d427ca5a08d.png

d35716a065dd47b890b7f593d19397bd.png

防盗链(反爬的一种方式):溯源,就是访问videoStatus.jsp中headers里的url的上一级是点击https://www.pearvideo.com/video_1794833这个链接访问的,故需要进行溯源到上一级链接。溯源是在headers里面的Referer里面找到上一级链接。

ef92c67935fb475586063070507b4c00.png

33c57a88c2f5475e89ac11dcae06ce6d.png

3.srcURL里面的内容进行修整,即将systemTime代表的数字换成cont-{contId}。代码里面用dic["systemTime"]等找systemTime和srcUrl是因为dic = resp.json()返回的是json形式,类似于map。

31d4cdf8c2bb4150ac06b5a4dbe65787.png

4.下载视频

fd9930ec20b64efe97a0008794fc6bb9.png

 

三个链接之间的关系:

11595027411343eeac827dc39d04a16d.png

 

# 1.拿到contId
# 2.拿到videoStatus.jsp返回的json  ->  srcURL
# 3.srcURL里面的内容进行修整
# 4.下载视频

import requests

# 在首页点开视频以后视频的网址
url = "https://www.pearvideo.com/video_1794833"
# 从_分开,获取1794833,第0是https://www.pearvideo.com/video,第1是1794833
contId = url.split('_')[1]

# 该网址的上一级url是 url="https://www.pearvideo.com/video_1794833"
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.697270035076595"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    # 防盗链: 溯源,当前本次请求的上一级是谁
    "Referer": url,
}

resp = requests.get(videoStatusUrl, headers=headers)
dic = resp.json()
# print(dic)
srcUrl = dic['videoInfo']['videos']['srcUrl']
systemTime = dic["systemTime"]
srcUrl = srcUrl.replace(systemTime, f"cont-{contId}")
# print(srcUrl)

# 下载视频
with open("viedos/a.mp4", mode="wb") as f:
    f.write(requests.get(srcUrl).content)

resp.close()

# 视频真实链接:https://video.pearvideo.com/mp4/short/20240619/cont-1794833-71107109-hd.mp4
# 拿到的链接:https://video.pearvideo.com/mp4/short/20240619/1719116797419-71107109-hd.mp4
# 将systemTime替换为cont-{contId}以后:https://video.pearvideo.com/mp4/short/20240619/cont-1794833-71107109-hd.mp4

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值