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

网页爬虫PDF文件下载问题:自动触发下载的无扩展名链接无法正确保存PDF

解决无PDF扩展名链接的PDF文件保存问题

嘿,我看到你的问题了,咱们先从最明显的语法错误说起——你的代码里有个小笔误直接导致了object not callable错误!

错误根源

你写的这行代码有两处问题:

fp.write(reponse.content)(decode=True))
  1. write()方法执行后返回的是写入的字节数(一个整数),你后面又加了(decode=True),相当于把整数当成函数来调用,自然会抛出object not callable错误;
  2. response.content本身就是二进制格式的响应体,PDF是二进制文件,完全不需要decode=True这个操作。

修正后的代码

我给你调整了代码,还优化了文件操作的写法(用with语句自动管理文件句柄,避免手动关闭的遗漏):

import requests
import os

url = "https://u14350383.ct.sendgrid.net/ls/click?upn=pmcnQ2-2FzMlkei0-2F............"
filePath = "your_target_file.pdf"

# 发送请求,默认允许重定向(这类短链通常会跳转)
response = requests.get(url)

# 先检查请求是否成功
if response.status_code == 200:
    # 检查文件是否存在,不存在则写入
    if not os.path.isfile(filePath):
        # 用with语句自动关闭文件
        with open(filePath, 'wb') as fp:
            fp.write(response.content)
        print("PDF文件保存成功!")
    else:
        print("文件已存在,无需重复保存")
else:
    print(f"请求失败,状态码:{response.status_code}")

额外注意事项

  • 这类短链通常会有重定向,requests.get()默认会自动跟随重定向,如果你需要确认跳转过程,可以打印response.history查看跳转记录;
  • 不要用response.text写入PDF:response.text是将二进制响应体按照默认编码解码成字符串,用它写入二进制文件会导致PDF内容乱码、无法打开,必须用response.content(二进制数据);
  • 如果你不确定响应是否是PDF,可以检查响应头的Content-Type字段:print(response.headers.get('Content-Type')),正常PDF的Content-Type是application/pdf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:14:06