可狱可囚的爬虫系列课程 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('视频下载完成!')
相关推荐
Salt_072816 小时前
DAY 36 官方文档的阅读
python·算法·机器学习·github
k***921616 小时前
Python 科学计算有哪些提高运算速度的技巧
开发语言·python
superman超哥16 小时前
仓颉条件变量深度解析与实践:解锁高效并发同步
开发语言·python·c#·仓颉
长空任鸟飞_阿康16 小时前
LangGraph 技术详解:基于图结构的 AI 工作流与多智能体编排框架
人工智能·python·langchain
道法自然|~17 小时前
【PHP】简单的脚本/扫描器拦截与重要文件保护
开发语言·爬虫·php
love530love17 小时前
ComfyUI 升级 v0.4.0 踩坑记录:解决 TypeError: QM_Queue.task_done() 报错
人工智能·windows·python·comfyui
阿坤带你走近大数据17 小时前
Python基础知识-数据结构篇
开发语言·数据结构·python
小智RE0-走在路上17 小时前
Python学习笔记(7)--集合,字典,数据容器总结
笔记·python·学习
沃斯堡&蓝鸟17 小时前
DAY 29 异常处理
python
Direction_Wind17 小时前
抓包的使用与讲解
python