Python批量下载图片的实现步骤

 更新时间:2025年10月04日 08:36:31   作者:detayun  
在我们日常生活中,有时候进入一个网站后,发现大量的图片,比如说一些好看的素材,以及我以前非常喜欢看的风景图片,想要下载下来怎么办?难道我一张张去复制?这有点不现实,所以本文给大家介绍了Python批量下载图片的实现步骤,需要的朋友可以参考下

在Python中批量下载图片可以通过以下步骤实现,这里提供一个完整的代码示例:

基础方案:使用requests库

import os
import requests
from urllib.parse import urlparse

def download_images(image_urls, save_dir='images'):
    """
    批量下载图片到指定目录
    :param image_urls: 图片URL列表
    :param save_dir: 保存目录(默认保存到当前目录的images文件夹)
    """
    # 创建保存目录
    os.makedirs(save_dir, exist_ok=True)
    
    for url in image_urls:
        try:
            # 发送HTTP请求
            response = requests.get(url, stream=True, timeout=5)
            response.raise_for_status()  # 检查请求是否成功
            
            # 提取文件名
            parsed_url = urlparse(url)
            filename = os.path.basename(parsed_url.path)
            if not filename:
                filename = f"image_{len(os.listdir(save_dir)) + 1}.jpg"
            
            # 保存文件
            filepath = os.path.join(save_dir, filename)
            with open(filepath, 'wb') as f:
                for chunk in response.iter_content(1024):
                    f.write(chunk)
            
            print(f"成功下载: {filename}")
        except Exception as e:
            print(f"下载失败 {url} - 错误: {str(e)}")

# 示例使用
if __name__ == "__main__":
    # 从网页解析图片URL(示例)
    image_urls = [
        "https://example.com/images/cat.jpg",
        "https://example.com/images/dog.png",
        "https://example.com/images/bird.webp"
    ]
    
    download_images(image_urls)

进阶方案:从网页批量抓取图片

from bs4 import BeautifulSoup
import requests

def scrape_images_from_webpage(url, save_dir='images'):
    """从网页中抓取所有图片并下载"""
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        img_tags = soup.find_all('img')
        
        image_urls = [img.get('src') for img in img_tags if img.get('src')]
        download_images(image_urls, save_dir)
    except Exception as e:
        print(f"抓取失败: {str(e)}")

# 示例使用
scrape_images_from_webpage("https://example.com/gallery")

关键点说明:

依赖库安装

pip install requests beautifulsoup4

核心功能

  • 自动创建保存目录
  • 智能处理文件名(保留原始文件名或自动生成)
  • 流式下载避免内存溢出
  • 完善的错误处理

扩展功能建议

# 添加多线程加速(使用concurrent.futures)
from concurrent.futures import ThreadPoolExecutor

# 在download_images函数中替换循环部分
with ThreadPoolExecutor(max_workers=8) as executor:
    executor.map(download_single_image, image_urls)

注意事项

  • 遵守网站robots.txt协议
  • 添加User-Agent头避免被屏蔽
  • 添加下载延迟防止IP被封
  • 处理不同图片格式(通过MIME类型判断)

完整增强版代码

import os
import requests
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor
import time

def download_single_image(url, save_dir):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        response = requests.get(url, headers=headers, stream=True, timeout=10)
        response.raise_for_status()
        
        # 获取内容类型确定扩展名
        content_type = response.headers.get('content-type')
        ext = 'jpg' if 'jpeg' in content_type else content_type.split('/')[-1]
        
        filename = os.path.basename(urlparse(url).path) or f"img_{int(time.time()*1000)}.{ext}"
        filepath = os.path.join(save_dir, filename)
        
        with open(filepath, 'wb') as f:
            for chunk in response.iter_content(8192):
                f.write(chunk)
        return True, filename
    except Exception as e:
        return False, str(e)

def batch_download(image_urls, save_dir='images', max_workers=8, delay=0.5):
    os.makedirs(save_dir, exist_ok=True)
    success = []
    failed = []
    
    def worker(url):
        result, info = download_single_image(url, save_dir)
        if result:
            success.append(info)
        else:
            failed.append((url, info))
        time.sleep(delay)  # 避免请求过载
    
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        executor.map(worker, image_urls)
    
    print(f"\n下载完成!成功: {len(success)} 失败: {len(failed)}")
    return success, failed

# 使用示例
if __name__ == "__main__":
    urls = [
        "https://example.com/image1.jpg",
        "https://example.com/image2.png",
        # 添加更多URL...
    ]
    
    success, failed = batch_download(urls)
    
    print("\n成功下载列表:")
    for name in success:
        print(f" - {name}")
        
    print("\n失败列表:")
    for url, reason in failed:
        print(f" - {url}: {reason}")

最佳实践建议:

  1. 添加代理支持:在requests.get中添加proxies参数
  2. 限速功能:使用time.sleep()控制请求频率
  3. 断点续传:通过检查文件大小实现
  4. 自动重试机制:使用tenacity库实现
  5. 文件去重:使用哈希值检查重复文件

这个方案提供了从基础到进阶的完整实现,用户可以根据实际需求选择适合的版本。代码中包含了详细的错误处理和日志输出,适合直接用于生产环境。

到此这篇关于Python批量下载图片的实现步骤的文章就介绍到这了,更多相关Python批量下载图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用flask如何获取post请求参数

    使用flask如何获取post请求参数

    近日在使用flask框架获取前端的请求时获取参数时,遇到了几个问题,所以下面这篇文章主要给大家介绍了关于使用flask如何获取post请求参数的相关资料,需要的朋友可以参考下
    2022-08-08
  • 如何安装多版本python python2和python3共存以及pip共存

    如何安装多版本python python2和python3共存以及pip共存

    这篇文章主要为大家详细介绍了python多版本的安装方法,解决python2和python3共存以及pip共存问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • python程序的打包分发示例详解

    python程序的打包分发示例详解

    这篇文章主要为大家介绍了python程序的打包分发示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 关于python中DLIB包无法安装问题解决办法

    关于python中DLIB包无法安装问题解决办法

    dlib一个在计算机视觉和机器学习领域尤其是人脸识别中广泛应用的库,其安装过程往往令开发者头疼不已,这篇文章主要介绍了关于python中DLIB包无法安装问题解决办法,需要的朋友可以参考下
    2026-01-01
  • python安装本地whl的实例步骤

    python安装本地whl的实例步骤

    在本篇文章里小编给大家整理的是关于python安装本地whl的实例步骤,有需要的朋友们可以学习下。
    2019-10-10
  • Python-嵌套列表list的全面解析

    Python-嵌套列表list的全面解析

    下面小编就为大家带来一篇Python-嵌套列表list的全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • python实现打开手机app并点击操作

    python实现打开手机app并点击操作

    这篇文章主要介绍了python实现打开手机app并点击操作,本文分为两部分一部分是打开应用,第二部分是调式手机连接电脑,需要的朋友可以参考下
    2022-04-04
  • django queryset 去重 .distinct()说明

    django queryset 去重 .distinct()说明

    这篇文章主要介绍了django queryset 去重 .distinct()说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 用Python写一个简易版弹球游戏

    用Python写一个简易版弹球游戏

    这篇文章主要介绍了用Python写一个简易版弹球游戏,文中有很多实用代码,对正在学习python的小伙伴们有很大的帮助.需要的朋友可以参考下
    2021-04-04
  • 十行Python代码实现文字识别功能

    十行Python代码实现文字识别功能

    这篇文章主要和大家分享如何调用百度的接口实现图片的文字识别。整体是用Python实现,所需要使用的第三方库包括aip、PIL、keyboard、pyinstaller,需要的可以参考一下
    2022-05-05

最新评论