Pythonrequests下载PDF反爬技巧
时间:2026-02-13 08:19:08 432浏览 收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Python requests 下载受反爬 PDF 方法》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

本文详解如何通过设置关键请求头(User-Agent 和 Accept-Language)并配合流式下载,成功获取 ADGM 等严格防护网站上的 PDF 文件,避免文件损坏或 403/406 错误。
在使用 requests 库下载 PDF 文件时,看似简单的 GET 请求常因目标网站的反爬机制而失败——表现为文件可保存但无法打开(提示“已损坏”或“不是有效的 PDF”)。根本原因往往不是网络问题,而是服务器根据请求头(如 Accept-Language、User-Agent)进行内容协商或访问控制。以阿布扎比全球市场(ADGM)官网为例,其 PDF 资源明确要求同时提供 User-Agent 和 Accept-Language 头,缺一不可;仅设 User-Agent 仍会返回空响应或 HTML 错误页,导致二进制内容错乱。
以下为推荐的健壮下载方案,采用流式读取(stream=True)、分块写入和异常校验,确保大文件稳定下载且完整性可控:
import requests
PDF_FILENAME = "alpha-development-middle-east-ltd-penalty-notice-redacted.pdf"
BASE_URL = "https://www.adgm.com/documents/operating-in-adgm/ongoing-obligation/enforcement/"
# 构建完整 URL(参数分离,提升可读性与可维护性)
url = f"{BASE_URL}{PDF_FILENAME}"
params = {
"la": "en",
"hash": "5EA2DA7D1492D105375580EEF2FB088F"
}
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15",
"Accept-Language": "en-GB,en;q=0.9,en-US;q=0.8,pt;q=0.7"
}
chunk_size = 32 * 1024 # 32KB 每次读取,平衡内存与 I/O 效率
with requests.get(url, headers=headers, params=params, stream=True) as response:
response.raise_for_status() # 自动抛出 HTTPError(如 403、404、500)
with open(PDF_FILENAME, "wb") as f:
for chunk in response.iter_content(chunk_size=chunk_size):
if chunk: # 过滤空 chunk(如 keep-alive 短连接)
f.write(chunk)关键要点说明:
✅ 必须包含 Accept-Language:ADGM 等政府/监管类网站常依据该头判断用户区域与语言偏好,缺失将触发服务端拒绝响应(返回 406 Not Acceptable 或伪造 HTML)。
✅ stream=True + iter_content() 是安全实践:避免将整个 PDF 加载进内存,尤其对百 MB 级文件至关重要;同时支持断点续传逻辑扩展。
✅ response.raise_for_status() 不可省略:它能立即捕获 HTTP 错误状态码,防止静默写入无效响应体(例如返回的 403 页面 HTML 被当成 PDF 写入,造成“损坏”假象)。
⚠️ 注意 User-Agent 的真实性:避免使用过于陈旧或明显爬虫特征的 UA(如 python-requests/2.x),建议模拟主流浏览器最新版本,并保持 UA 与 Accept-Language 语义一致(如 en-GB 对应英国区 Safari)。
若仍失败,可进一步检查:
- 使用浏览器开发者工具 → Network 面板,复制真实下载请求的完整 Headers(含 Cookie、Referer 等);
- 添加 timeout=(3.05, 27) 防止卡死(连接超时 3.05s,读取超时 27s);
- 对于需登录或 Token 的资源,优先考虑 requests.Session() 维持会话状态。
此方法已在 ADGM、FCA、MAS 等多个监管机构官网验证有效,兼顾兼容性与鲁棒性,是生产环境 PDF 下载的推荐范式。
终于介绍完啦!小伙伴们,这篇关于《Pythonrequests下载PDF反爬技巧》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
415 收藏
-
151 收藏
-
189 收藏
-
350 收藏
-
155 收藏
-
332 收藏
-
165 收藏
-
340 收藏
-
342 收藏
-
346 收藏
-
336 收藏
-
452 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习