Python实现批量下载文件的代码详解

 更新时间:2025年05月06日 10:07:33   作者:猿界新星蔡  
下载文件是我们在日常工作中常常要做的一件事情,当我们需要从互联网上批量下载大量文件时,手动一个一个去下载显然不够高效,为了解决这个问题,我们可以使用Python编写一个批量下载文件的脚本,让它自动帮我们下载文件,下面小编给大家详细介绍一下

概述

该工具是一个用 Python 编写的批量下载文件脚本。它从配置文件中读取下载任务列表,并并行下载文件,同时显示下载进度。该工具使用 requests 库进行 HTTP 请求,使用 tqdm 库显示下载进度,并使用 configparser 库读取配置文件。

依赖

在使用该工具之前,请确保已安装以下库:

  • requests
  • tqdm

可以使用以下命令安装所需的库:

pip install requests tqdm

配置文件

创建一个配置文件(例如 downloads.ini),其中包含下载任务列表。配置文件使用 INI 格式,每个下载任务有一个单独的节,每个节包含 url 和 path 两个字段。

示例配置文件 downloads.ini

[file1]
url = http://example.com/file1.jpg
path = downloads/file1.jpg

[file2]
url = http://example.com/file2.jpg
path = downloads/file2.jpg

[file3]
url = http://example.com/file3.jpg
path = downloads/file3.jpg

运行脚本

将以下代码保存为 batch_download.py

import os
import requests
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm
import configparser
import argparse

def download_file(task):
    """
    下载单个文件并保存到指定路径,并显示下载进度
    """
    url = task['url']
    path = task['path']
    
    try:
        os.makedirs(os.path.dirname(path), exist_ok=True)
        
        with requests.get(url, stream=True) as r:
            r.raise_for_status()
            total_size = int(r.headers.get('content-length', 0))
            with open(path, 'wb') as f, tqdm(
                total=total_size, unit='B', unit_scale=True, desc=os.path.basename(path)
            ) as pbar:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
                    pbar.update(len(chunk))
        
        print(f'{path} 下载完成')
    except Exception as e:
        print(f'下载 {url} 失败: {e}')

def read_config(config_path):
    """
    从配置文件读取下载任务列表
    """
    config = configparser.ConfigParser()
    config.read(config_path)
    tasks = []
    for section in config.sections():
        url = config[section]['url']
        path = config[section]['path']
        tasks.append({'url': url, 'path': path})
    return tasks

def main(config_path):
    """
    主函数,读取配置文件并并行下载文件
    """
    tasks = read_config(config_path)
    
    with ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_file, tasks)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='批量下载文件工具')
    parser.add_argument('config', type=str, help='配置文件路径')
    args = parser.parse_args()
    
    main(args.config)

使用方法

  • 创建配置文件:按照上述示例创建 downloads.ini 文件,并根据需要修改下载任务。

  • 运行脚本:在命令行中运行以下命令,指定配置文件路径:

python batch_download.py downloads.ini

代码功能说明

  • 导入库
import os
import requests
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm
import configparser
import argparse
  • download_file 函数:下载单个文件并保存到指定路径,同时显示下载进度。
def download_file(task):
    url = task['url']
    path = task['path']
    
    try:
        os.makedirs(os.path.dirname(path), exist_ok=True)
        
        with requests.get(url, stream=True) as r:
            r.raise_for_status()
            total_size = int(r.headers.get('content-length', 0))
            with open(path, 'wb') as f, tqdm(
                total=total_size, unit='B', unit_scale=True, desc=os.path.basename(path)
            ) as pbar:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
                    pbar.update(len(chunk))
        
        print(f'{path} 下载完成')
    except Exception as e:
        print(f'下载 {url} 失败: {e}')
  • read_config 函数:从配置文件读取下载任务列表。
def read_config(config_path):
    config = configparser.ConfigParser()
    config.read(config_path)
    tasks = []
    for section in config.sections():
        url = config[section]['url']
        path = config[section]['path']
        tasks.append({'url': url, 'path': path})
    return tasks
  • main 函数:读取配置文件并并行下载文件。
def main(config_path):
    tasks = read_config(config_path)
    
    with ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_file, tasks)
  • 命令行参数解析:使用 argparse 解析命令行参数,指定配置文件路径。
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='批量下载文件工具')
    parser.add_argument('config', type=str, help='配置文件路径')
    args = parser.parse_args()
    
    main(args.config)

注意事项

  • 请确保配置文件中的 URL 是有效的下载链接。
  • 如果下载过程中出现错误,脚本会输出相应的错误信息。

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

相关文章

  • Python调用Pandas实现Excel读取

    Python调用Pandas实现Excel读取

    这篇文章主要为大家介绍了在Python中如何调用Pandas实现Excel文件的读取,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • 浅谈pytest中重试机制的多种方法

    浅谈pytest中重试机制的多种方法

    这篇文章主要介绍了浅谈pytest中重试机制,包括常用插件pytest-rerunfailures、灵活插件pytest-retry、自定义钩子及装饰器,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • 解决python打不开文件(文件不存在)的问题

    解决python打不开文件(文件不存在)的问题

    今天小编就为大家分享一篇解决python打不开文件(文件不存在)的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python如何使用paramiko模块连接linux

    Python如何使用paramiko模块连接linux

    这篇文章主要介绍了Python如何使用paramiko模块连接linux,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python中视频音频的剪辑与处理实现

    python中视频音频的剪辑与处理实现

    Python中轻松实现各种视频处理操作,包括剪辑、合并、添加音频、文本、特效等多种功能,主要介绍了python中视频音频的剪辑与处理实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • python编写分类决策树的代码

    python编写分类决策树的代码

    这篇文章主要为大家详细介绍了python编写分类决策树的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python 中文乱码问题深入分析

    python 中文乱码问题深入分析

    一直以来,python中的中文编码就是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?
    2011-03-03
  • Keras实现Vision Transformer VIT模型示例详解

    Keras实现Vision Transformer VIT模型示例详解

    这篇文章主要为大家介绍了Keras实现Vision Transformer VIT模型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 使用Python实现惰性加载的三种方法详解

    使用Python实现惰性加载的三种方法详解

    在现代软件开发中,惰性加载是一种优化技术,用于延迟计算或加载资源密集型属性,直至首次访问时才执行,Python提供了丰富的元类与属性操作机制,允许我们通过getattr、getattribute和setattr方法实现惰性属性管理,本文将详细探讨这三种方法的实现细节,需要的朋友可以参考下
    2025-10-10
  • Python引用计数操作示例

    Python引用计数操作示例

    这篇文章主要介绍了Python引用计数操作,结合实例形式分析了Python引用计数相关操作与运行机制,需要的朋友可以参考下
    2018-08-08

最新评论