You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests库下载PDF失败:下载文件无法读取,求解决方法

问题:使用requests库下载的PDF文件无法读取

我编写了一段使用requests库从指定链接下载PDF的代码,但下载完成后的文件无法正常读取,怀疑链接可能不是有效的PDF下载链接,但作为新手无法确定具体原因,希望得到帮助:

import requests

url = "https://disclosure.bursamalaysia.com/FileAccess/apbursaweb/download?id=231746&name=EA_DS_ATTACHMENTS"

response = requests.get(url)

with open("EA_DS_ATTACHMENTS.pdf", "wb") as f:
    f.write(response.content)

print("PDF downloaded successfully!")

解决方案

这种情况通常是网站对请求做了验证,直接发送的requests.get()请求未通过验证,返回的并非真实PDF内容(可能是HTML错误页面、人机验证页面等),导致保存的文件无法打开。可以按以下方式排查和修复:

  • 添加请求头模拟浏览器访问
    很多网站会检查请求的User-Agent字段,判断请求是否来自合法浏览器。添加该字段可绕过基础验证:
import requests

url = "https://disclosure.bursamalaysia.com/FileAccess/apbursaweb/download?id=231746&name=EA_DS_ATTACHMENTS"
# 模拟Chrome浏览器请求头,可根据自己的浏览器调整
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
# 先校验响应内容类型是否为PDF
if response.headers.get("Content-Type") == "application/pdf":
    with open("EA_DS_ATTACHMENTS.pdf", "wb") as f:
        f.write(response.content)
    print("PDF downloaded successfully!")
else:
    print(f"未获取到有效PDF,响应内容类型: {response.headers.get('Content-Type')}")
    # 打印部分响应内容,查看返回的是什么页面
    print(response.text[:500])
  • 使用Session维持会话状态
    部分网站需要先访问主页完成会话初始化,才能正常下载文件,此时可使用requests.Session()维持会话:
import requests

url = "https://disclosure.bursamalaysia.com/FileAccess/apbursaweb/download?id=231746&name=EA_DS_ATTACHMENTS"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

with requests.Session() as session:
    # 先访问网站主页初始化会话
    session.get("https://disclosure.bursamalaysia.com", headers=headers)
    response = session.get(url, headers=headers)
    if response.headers.get("Content-Type") == "application/pdf":
        with open("EA_DS_ATTACHMENTS.pdf", "wb") as f:
            f.write(response.content)
        print("PDF downloaded successfully!")
    else:
        print(f"未获取到有效PDF,响应内容类型: {response.headers.get('Content-Type')}")
  • 验证链接本身有效性
    如果上述方法都无效,直接把链接复制到浏览器中打开:
    • 若浏览器能正常下载PDF,说明是请求验证的问题,可进一步排查请求头或会话参数;
    • 若浏览器也无法下载,说明链接可能需要登录权限,或者已经过期失效。

内容的提问来源于stack exchange,提问作者Aman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:33:27