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

修复dload.save_multi TypeError错误 批量爬取网页图片保存到本地指定目录

问题修复方案

报错原因

dload.save_multi()的url_list参数要求传入字符串格式的URL列表,你传入的replace是Pandas DataFrame对象,类型不匹配触发了TypeError。

现有代码快速修复

只需要修改最后调用保存方法的代码,将DataFrame中的链接提取为列表即可:

# 提取DataFrame第一列的链接,去除首尾空格后转为列表
url_list = replace[0].str.strip().tolist()
save = dload.save_multi(url_list=url_list, dir=folder, max_threads=1, tsleep=0.05)

更高效的实现方案

原有代码中Pandas属于完全冗余的依赖,直接对原始链接列表做清洗即可,同时可适当调整线程数提升下载速度,优化后完整代码如下:

from bs4 import BeautifulSoup
import requests
import dload
import os

# 目标页面地址
week_11_picURL = "https://www.packers.com/photos/game-photos-packers-at-vikings-week-11-2021#9258618e-e793-41ae-8d9a-d3792366dcbb"
# 本地保存目录,自动创建不存在的目录
folder = "f:/nfl pics/packers/week 11 - at vikings"
os.makedirs(folder, exist_ok=True)

# 请求页面解析DOM
html_page = requests.get(week_11_picURL)
soup = BeautifulSoup(html_page.content, 'html.parser')

# 提取并清洗链接
url_list = []
for x in soup.select('.nfl-c-photo-album__picture-wrapper picture source:first-child'):
    try:
        raw_url = x['srcset'].split(',')[0]
    except:
        raw_url = x['data-srcset'].split(',')[0]
    # 直接在列表阶段完成清洗,不需要走Pandas
    clean_url = raw_url.replace("/t_lazy", "").replace("1x", "").strip()
    url_list.append(clean_url)

# 多线程下载,可根据反爬情况调整max_threads参数,一般3-10不会触发拦截
dload.save_multi(url_list=url_list, dir=folder, max_threads=5, tsleep=0.05)

优化点说明

  • 移除冗余的Pandas依赖,减少内存占用,代码逻辑更简洁
  • 新增目录自动创建逻辑,避免本地目录不存在导致的报错
  • 直接对原始链接列表做清洗,省去DataFrame转换、处理的性能开销
  • 适当调高线程数,下载速度提升明显
  • 新增链接首尾空格清洗,避免无效链接导致的下载失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:04