可狱可囚的爬虫系列课程 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('视频下载完成!')
相关推荐
XMYX-018 分钟前
用Python3脚本实现Excel数据到TXT文件的智能转换:自动化办公新姿势
python·自动化·excel
蹦蹦跳跳真可爱58923 分钟前
Python----数据分析(Numpy一:numpy库简介,与list列表的区别,数组的创建,随机数组的创建)
python·数据分析·numpy
微凉的衣柜24 分钟前
利用 Open3D 保存并载入相机视角的简单示例
python·open3d·点云处理
code_talking1 小时前
Python学习第十七天之PyTorch保姆级安装
人工智能·pytorch·python·conda
微刻时光1 小时前
影刀RPA + AI大语言模型:打造智能自动化流程的超级引擎
人工智能·python·语言模型·rpa·影刀rpa·影刀证书·影刀实战
凌小添1 小时前
Python入门教程丨3.5 正则表达式
python·mysql·正则表达式
鸡鸭扣2 小时前
数据结构与算法:动态规划dp:买卖股票相关力扣题(下):309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费
数据结构·python·算法·leetcode·动态规划·力扣·dp
coco_1998_22 小时前
【Win10】Anaconda + Pycharm 环境搭建教程
ide·python·pycharm
m0_748038562 小时前
NLP09-加强1-对比SVM
人工智能·python·机器学习·支持向量机·分类·nlp