可狱可囚的爬虫系列课程 15:防盗链反爬虫的处理

一、防盗链了解

防盗链是一种技术手段,主要用于防止其他网站通过直接链接的方式使用本网站的资源(如图片、文件等),从而节省带宽和服务器资源。当其他网站尝试直接链接到受保护的资源时,服务器会根据设置的规则判断请求来源,如果发现请求来自未经授权的网站,则拒绝提供资源。

二、某视频网站分析

我们在某视频网站中随便打开一个网页,借助开发者工具寻找视频的播放链接。

(1)2024年度回访:蔡磊坚信努力之后的希望文章中,我们寻得视频的播放地址为:https://video.pearvideo.com/mp4/short/20241231/cont-1797785-16042954-hd.mp4,并且视频能够正常访问。


(2)但是当我尝试使用代码将此视频链接进行抓取时,渐渐的发现了端倪,视频链接并不是固定在网页中的,而是在点击播放视频时加载上去的。

python 复制代码
import requests


headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}

Link = 'https://www.pearvideo.com/video_1797785'
response = requests.get(url=Link, headers=headers)
print(response.text)

(3)借助前面提到过的爬虫方法,我在该视频网站中找到了两处关键点:一方面在浏览器地址栏找到了用于构造视频地址的编号,另一方面找到了数据接口也发现了可用于构造视频地址的信息。

(4)开始构造视频地址,但是提示该文章已下线。这其实很明显,就是一个很容易混淆人的防盗链反爬虫。

python 复制代码
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}
# 1. 复制接口地址,获取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())

三、使用 Referer 参数处理防盗链

Referer 防盗链只需要记住一点:"Referer 就是我来时的路"。我们将 Referer 参数放入到 headers 中。

python 复制代码
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
    'Referer': 'https://www.pearvideo.com/video_1797785'
}
# 1. 复制接口地址,获取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())

此视频网站的防盗链我们就成功的突破了。

至于如何再将视频下载下来,大家可以顺着思路继续探索!

四、视频下载完整代码

python 复制代码
import requests

article_link = 'https://www.pearvideo.com/video_1797785'
video_id = article_link.split('_')[-1]

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
    'Referer': article_link
}
# 1. 复制接口地址,获取接口中的srcUrl和 systemTime
Link = f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
json_data = response.json()

system_time = json_data['systemTime']
src_url = json_data['videoInfo']['videos']['srcUrl']

# 2. 视频地址拼接构造
video_link = src_url.replace(system_time, f'cont-{video_id}')

# 3.视频下载
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
response = requests.get(url=video_link, headers=headers)
with open('video_01.mp4', 'wb') as video_file:
    video_file.write(response.content)
print('视频下载完成!')
相关推荐
QQ6765800813 分钟前
基于 PyTorch 的 VGG16 深度学习人脸识别检测系统的实现+ui界面
人工智能·pytorch·python·深度学习·ui·人脸识别
木木黄木木14 分钟前
Python制作史莱姆桌面宠物!可爱的
开发语言·python·宠物
胖哥真不错42 分钟前
Python基于方差-协方差方法实现投资组合风险管理的VaR与ES模型项目实战
python·毕业设计·课程设计·方差-协方差方法·投资组合风险管理·var与es模型
慧一居士1 小时前
flask功能使用总结和完整示例
python
大模型铲屎官1 小时前
【深度学习-Day 23】框架实战:模型训练与评估核心环节详解 (MNIST实战)
人工智能·pytorch·python·深度学习·大模型·llm·mnist
阿幸软件杂货间2 小时前
PPT转图片拼贴工具 v1.0
python·powerpoint
AIGC_北苏2 小时前
DrissionPage爬虫包实战分享
爬虫·python·drissionpage
华科云商xiao徐3 小时前
增量式网络爬虫通用模板
爬虫
YBCarry_段松啓3 小时前
uv:下一代 Python 包管理器
人工智能·python
yorushika_3 小时前
python打卡训练营打卡记录day45
开发语言·python·深度学习·tensorboard