网页爬虫PDF文件下载问题:自动触发下载的无扩展名链接无法正确保存PDF
解决无PDF扩展名链接的PDF文件保存问题
嘿,我看到你的问题了,咱们先从最明显的语法错误说起——你的代码里有个小笔误直接导致了object not callable错误!
错误根源
你写的这行代码有两处问题:
fp.write(reponse.content)(decode=True))
write()方法执行后返回的是写入的字节数(一个整数),你后面又加了(decode=True),相当于把整数当成函数来调用,自然会抛出object not callable错误;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
相关产品推荐
相关产品推荐

