一个自定义的图片批量下载函数

本文介绍如何使用Python的requests库和concurrent.futures模块,通过DataFrame处理图片URL和名称,实现高效并发下载图片到指定路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个DataFrame里面保存所有待下载图片的URL和name,设置下载图片的路径,运行如下代码:

import requests
import shutil
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path


def save_image(session, img_url, file_name):
	"""
	下载一张图片到指定文件夹
	:param session: requests.Session()对象
	:param img_url: 图片URL
	:param file_name: 文件路径
	:return: 
	"""
	r = session.get(f"{img_url}", stream=True)
	if r.status_code == 200:
		with open(file_name, 'wb') as f:
			r.raw.decode_content = True
			shutil.copyfileobj(r.raw, f)


def download_img(img_df, target_path):
	"""
	批量下载图片
	:param img_df: 包含图片url和name的DataFrame数据集
	:param target_path: 保存图片的目标路径
	:return: 
	"""
	tasks = []
	img_dir = Path(target_path)
	with ThreadPoolExecutor(100) as executor, requests.Session() as sess, tqdm(total=len(img_df.index.unique())) as bar:
		for index, row in img_df.iterrows():
			task = executor.submit(save_image, sess, row['url'], img_dir.joinpath(f"{row['name']}"))
			task.add_done_callback(lambda fut: bar.update(1))
			tasks.append(task)

ThreadPoolExecutor(100)的意思是开100个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值