当前位置: 首页 > news >正文

【Python 爬虫 防盗链】

文章目录

  • 前言
  • 一、防盗链的原理
  • 二、绕过防盗链的方法
    • 1. 使用`requests`库设置`Referer`
    • 2. 使用`urllib`库设置`Referer`
  • 总结


前言

在进行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等,以更好地模拟浏览器行为,提升爬虫的成功率。

相关文章:

  • Java大模型开发入门 (12/15):Agent实战 - 打造能调用外部API的智能助手
  • STM32F4通用定时器TIM9-TIM14讲解及PWM呼吸灯实例解读
  • LeetCode - LCR 173. 点名
  • Magentic-ui项目相关整理
  • 如何自动化测试 DependencyMatcher 规则效果(CI/CD 集成最佳实践)
  • 60天python训练计划----day52
  • Flutter 状态管理与 API 调用的完美结合:从理论到实践
  • RapidNJ软件的安装
  • 独立看门狗(IWDG)与窗口看门狗(WWDG)
  • 6.14星期六休息一天
  • 从0开始学习语言模型--Day01--亲自构筑语言模型的重要性
  • IPv4详解
  • Qt:Qt桌面程序正常退出注意事项
  • 陈小群飞机随笔总结
  • 【编译原理】第九章 运行时存储
  • linux msyql8 允许远程连接
  • 数据库资源帖
  • 第11次课 深搜1 A
  • Javascript什么是回调函数?
  • LangChain面试内容整理-知识点13:输出解析(OutputParser)模块
  • 做网站有哪个空间/网页制作素材模板
  • 邢台做wap网站的公司/福州360手机端seo
  • 织梦网站后台空白/seo课
  • 东莞网站建设总部地址/什么优化
  • 佛山网站建设设计公司/成都专业seo公司
  • 电商网站开发岗位职责/吴江网站制作