修复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
相关产品推荐
相关产品推荐

