【Python 爬虫 防盗链】

发布于:2025-06-17 ⋅ 阅读:(17) ⋅ 点赞:(0)


前言

在进行Python爬虫开发时,常常会遇到防盗链机制的阻碍。防盗链是一种防止他人直接引用网站资源(如图片、视频等)的技术手段。


一、防盗链的原理

防盗链主要通过HTTP请求头中的Referer字段来判断请求的来源。当用户在浏览器中点击链接访问资源时,浏览器会自动在请求头中添加Referer字段,指明当前请求的来源页面。服务器可以根据Referer字段来判断请求是否来自合法的页面,从而决定是否返回资源。

例如,某网站的图片资源地址为:

https://www.example.com/images/sample.jpg

当用户从该网站的页面访问该图片时,浏览器会在请求头中添加:

Referer: https://www.example.com/page.html

服务器检测到Referer字段来自本网站,认为是合法请求,返回图片资源。

但如果用户直接在浏览器地址栏中输入图片地址,或者从其他网站引用该图片,Referer字段可能为空或为其他网站地址,服务器检测到后可能返回403 Forbidden错误,阻止资源的访问。


二、绕过防盗链的方法

在Python爬虫中,通过设置请求头中的Referer字段,模拟合法的请求来源,从而绕过防盗链的限制。

1. 使用requests库设置Referer

import requests

# 目标资源地址
url = 'https://www.example.com/images/sample.jpg'

# 设置请求头,添加Referer字段
headers = {
    'Referer': 'https://www.example.com/page.html',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}

# 发送请求
response = requests.get(url, headers=headers)

# 保存资源
with open('sample.jpg', 'wb') as f:
    f.write(response.content)

在上述代码中,通过设置Referer字段为资源所在页面的地址,模拟从该页面发起的请求,从而绕过防盗链。

2. 使用urllib库设置Referer

import urllib.request

# 目标资源地址
url = 'https://www.example.com/images/sample.jpg'

# 设置请求头,添加Referer字段
headers = {
    'Referer': 'https://www.example.com/page.html',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}

# 创建请求对象
req = urllib.request.Request(url, headers=headers)

# 发送请求并读取响应
with urllib.request.urlopen(req) as response:
    content = response.read()

# 保存资源
with open('sample.jpg', 'wb') as f:
    f.write(content)

同样地,通过设置Referer字段,模拟合法请求来源,绕过防盗链。


总结

防盗链是网站保护资源的一种常见手段,主要通过Referer字段来判断请求的合法性。通过设置请求头中的Referer字段,模拟合法的请求来源,可以有效绕过防盗链的限制,成功获取目标资源。

在实际开发中,除了设置Referer字段外,还可能需要设置其他请求头字段,如User-AgentCookie等,以更好地模拟浏览器行为,提升爬虫的成功率。


网站公告

今日签到

点亮在社区的每一天
去签到