讲师中心 微信公众号
AI工具推荐 视频效率加速

如何正确使用 Python requests 下载受反爬保护的 PDF 文件

梦杰吖_4275

梦杰吖_4275

发布时间:2026-02-08 21:08:24

|

420人浏览过

|

来源于php中文网

原创

如何正确使用 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)。

若仍失败,可进一步检查:

生成HTML格式PPT
生成HTML格式PPT

从零开始创建惊艳、动画丰富且自包含的 HTML 演示文稿,或通过转换 PowerPoint 文件生成。当用户希望制作幻灯片、构建演示文稿、打造路演资料(pitch deck)、将 PPT/PPTX 转换为网页格式,或增强现有 HTML 演示文稿时,应使用此能力。该能力帮助用户通过视觉预览而非抽象选项来发掘自身审美偏好。

下载
  • 使用浏览器开发者工具 → Network 面板,复制真实下载请求的完整 Headers(含 Cookie、Referer 等);
  • 添加 timeout=(3.05, 27) 防止卡死(连接超时 3.05s,读取超时 27s);
  • 对于需登录或 Token 的资源,优先考虑 requests.Session() 维持会话状态。

此方法已在 ADGM、FCA、MAS 等多个监管机构官网验证有效,兼顾兼容性与鲁棒性,是生产环境 PDF 下载的推荐范式。

立即学习“Python免费学习笔记(深入)”;

相关文章

极轻PDF
极轻PDF

专业的在线PDF工具,支持PDF编辑、转换、合并、压缩等多种功能,操作简单,处理高效,满足日常办公与学习中的PDF处理需求。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12559

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1266

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

864

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1946

2025.08.19

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1946

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

14846

2023.09.14

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn