Comment télécharger tous les fichiers d’un répertoire public accessible via URL avec python ?

Introduction

Ce tutoriel montre comment lister et télécharger tous les fichiers d’un répertoire public accessible via URL — par exemple, lorsqu’un collègue partage un répertoire web comme https://******/pub/ contenant plusieurs fichiers.

Nous allons nous concentrer sur le téléchargement de tous les fichiers se terminant par .nc (fichiers NetCDF), mais vous pouvez adapter la méthode pour n’importe quel type de fichier.

Télécharger des fichiers depuis un répertoire URL

Imaginez qu’un collègue vous envoie un lien vers un répertoire web — par exemple :

1
https://******/pub/

Lorsque vous l’ouvrez dans votre navigateur, vous voyez une liste de fichiers (voir image ci-dessous).
Votre objectif est de lister automatiquement et télécharger tous les fichiers se terminant par .nc avec Python.

Liste et téléchargement de tous les fichiers <code>.nc</code> d’un répertoire URL avec Python.
Liste et téléchargement de tous les fichiers .nc d’un répertoire URL avec Python.

Étape 1 — Lister tous les fichiers du répertoire URL

La première étape consiste à récupérer le contenu HTML de la page du répertoire.
Vous pouvez le faire facilement avec la bibliothèque requests :

1
2
3
4
import requests

url = 'https://******/pub/'
page = requests.get(url).text

Ensuite, vous devez extraire tous les liens vers les fichiers depuis la page.
Une méthode simple et efficace consiste à utiliser BeautifulSoup :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from bs4 import BeautifulSoup

soup = BeautifulSoup(page, 'html.parser')

# Filtrer uniquement les fichiers se terminant par ".nc"
links = [url + node.get('href') for node in soup.find_all('a') if node.get('href').endswith('.nc')]

print("Fichiers trouvés :")
for link in links:
    print(link)

Cela vous donnera une liste des URLs complètes de tous les fichiers .nc présents dans le répertoire.

Étape 2 — Télécharger tous les fichiers localement

Une fois que vous avez la liste des liens, vous pouvez télécharger chaque fichier avec urllib.request.urlretrieve :

1
2
3
4
5
6
7
8
import urllib.request

for link in links:
    filename = link.split('/')[-1]
    print(f"Téléchargement : {filename}")
    urllib.request.urlretrieve(link, filename)

print("✅ Téléchargement terminé !")

Ce script va :

  1. Extraire le nom du fichier depuis chaque URL.
  2. Télécharger chaque fichier et l’enregistrer localement dans le répertoire courant.

Améliorations optionnelles

Ajouter une barre de progression avec tqdm :

1
2
3
4
5
from tqdm import tqdm

for link in tqdm(links, desc="Téléchargement des fichiers"):
    filename = link.split('/')[-1]
    urllib.request.urlretrieve(link, filename)

Gérer les erreurs de manière sécurisée :

1
2
3
4
try:
    urllib.request.urlretrieve(link, filename)
except Exception as e:
    print(f"❌ Échec du téléchargement de {filename} : {e}")

Changer le répertoire de sortie :

1
2
3
4
5
6
7
8
import os

output_dir = "downloads"
os.makedirs(output_dir, exist_ok=True)

for link in links:
    filename = os.path.join(output_dir, link.split('/')[-1])
    urllib.request.urlretrieve(link, filename)

Voir aussi

Références

Image

of