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

使用Python requests下载PDF出现空白无法读取问题求助

修复PDF下载损坏与速度慢的问题

嘿,我来帮你解决这两个头疼的问题:下载耗时久、保存后的PDF无法正常打开。咱们先拆解问题,再给出修复后的代码~

核心问题分析

1. PDF损坏的直接原因

你用了文本模式('w')来保存二进制的PDF文件,这会破坏文件的字节结构,导致Acrobat无法识别。二进制文件必须用二进制写入模式('wb')。

2. 循环逻辑冗余(拖慢速度+无效写入)

当前代码里,每获取一个城市的PDF,就会遍历所有market_name写入6次文件——这不仅浪费资源拖慢速度,还没把城市代码和对应市场名称关联起来,属于逻辑错误。

3. 下载慢的潜在原因

  • 没有设置请求超时,一旦服务器响应慢,程序会无限制等待
  • 没有模拟浏览器请求头,部分服务器会对非浏览器请求做限速或拦截

修复后的完整代码

import requests
from datetime import date
import os

market_type = "ECenter"
market_name = ["Minden", "Porta-Westfalica", "Osnabruck", "Melle", "Bad Nenndorf", "Herford"]
weekNumber = date.today().isocalendar()[1]
city_codes = ["3315", "3317", "3309", "3323", "3325", "3328"]

# 确保保存目录存在,避免报错
save_dir = 'C:\\Users\\user\\Desktop\\LeafletFiles'
os.makedirs(save_dir, exist_ok=True)

# 模拟浏览器请求头,避免服务器拦截/限速
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

# 配对城市代码和市场名称,消除冗余循环
for city_code, name in zip(city_codes, market_name):
    url = f"https://static.edeka.de/media/handzettel/MINDEN/{city_code}/blaetterkatalog/pdf/complete.pdf"
    try:
        # 添加超时参数(10秒,可按需调整),避免无限等待
        myfile = requests.get(url, headers=headers, timeout=10)
        # 检查请求是否成功(状态码200为正常)
        myfile.raise_for_status()
        
        # 用二进制写入模式保存PDF
        file_path = f'{save_dir}\\{market_type}_{name}_{weekNumber}.pdf'
        with open(file_path, 'wb') as pdf:
            pdf.write(myfile.content)
        print(f"✅ 成功保存:{file_path}")
    except requests.exceptions.RequestException as e:
        print(f"❌ 下载{name}的PDF失败:{str(e)}")

关键修改点说明

  • 二进制写入:把'w'改成'wb',确保PDF字节流完整不被破坏
  • 配对遍历:用zip(city_codes, market_name)让每个城市代码对应唯一的市场名称,消除无效循环
  • 请求优化:添加headers模拟浏览器,设置timeout防止长时间卡顿
  • 目录检查:自动创建保存目录,避免因文件夹不存在报错
  • 异常处理:捕获请求过程中的错误(超时、404等),让程序更健壮

额外小建议

如果偶尔遇到网络波动导致下载失败,可以考虑加入重试机制(比如用tenacity库),应对临时的服务器响应问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:37:55