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

Python批量下载Excel中PDF链接报错 如何无错保存文件

错误原因

报错的核心诱因是URL列表中存在nan空值:你从Excel读取的Source_URL列存在空单元格,pandas会默认将空单元格转为float类型的nan,dload.save_multi在解析URL时遇到非字符串的float类型值就会抛出解码错误。此外你当前的URL列表存在大量重复值,会导致重复下载相同PDF浪费资源。

修复后的代码

import dload
import pandas as pd
import requests

# 配置请求头,伪装浏览器避免部分网站反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

df = pd.read_excel('examples.xlsx')
# 直接从列中提取非空、去重的URL列表
list_urls = df['Source_URL'].dropna().unique().tolist()

# 传入headers参数,下载文件
pdfs = dload.save_multi(
    list_urls, 
    dir='F:/technophile/proj/PDFs/', 
    max_threads=8, 
    tsleep=1,
    headers=headers
)
print(pdfs)
print('saved!')

更可控的备选写法(requests单线程遍历,单文件下载失败不影响整体)

如果你需要单独捕获每个URL的下载错误,可以用下面的写法,调试更方便:

import os
import pandas as pd
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
save_dir = 'F:/technophile/proj/PDFs/'
os.makedirs(save_dir, exist_ok=True)

df = pd.read_excel('examples.xlsx')
list_urls = df['Source_URL'].dropna().unique().tolist()

for url in list_urls:
    try:
        # 提取PDF文件名
        file_name = url.split('/')[-1]
        save_path = os.path.join(save_dir, file_name)
        # 跳过已下载的文件
        if os.path.exists(save_path):
            print(f"{file_name} 已存在,跳过下载")
            continue
        # 发送请求下载
        resp = requests.get(url, headers=headers, timeout=30)
        resp.raise_for_status()
        # 保存文件
        with open(save_path, 'wb') as f:
            f.write(resp.content)
        print(f"{file_name} 下载完成")
    except Exception as e:
        print(f"{url} 下载失败,错误信息:{str(e)}")

print('所有下载任务处理完成')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:02