import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin def telecharger_images(url, dossier_sortie="images"): # Créer le dossier de sortie s'il n'existe pas if not os.path.exists(dossier_sortie): os.makedirs(dossier_sortie) # Récupérer le contenu de la page web reponse = requests.get(url) if reponse.status_code != 200: print(f"Erreur : Impossible de récupérer la page {url}") return # Analyser le contenu HTML soup = BeautifulSoup(reponse.content, 'html.parser') images = soup.find_all('img') # Télécharger chaque image for i, image in enumerate(images): src = image.get('src') if not src: continue # Construire l'URL absolue de l'image url_image = urljoin(url, src) try: # Télécharger l'image reponse_image = requests.get(url_image, stream=True) if reponse_image.status_code == 200: # Deviner le nom de fichier nom_base = None extension = ".jpg" # 1. Essayer d'extraire le nom depuis l'URL chemin_url = src.split('?')[0] # Retirer les paramètres de requête nom_url = os.path.basename(chemin_url) if nom_url and '.' in nom_url: nom_base, extension = os.path.splitext(nom_url) # 2. Essayer l'attribut alt if not nom_base or nom_base.startswith('image_'): alt = image.get('alt', '').strip() if alt: # Nettoyer le texte alt pour en faire un nom de fichier valide nom_base = "".join(c for c in alt if c.isalnum() or c in (' ', '-', '_')).strip() nom_base = nom_base.replace(' ', '_') # 3. Essayer l'attribut title if not nom_base or nom_base.startswith('image_'): title = image.get('title', '').strip() if title: nom_base = "".join(c for c in title if c.isalnum() or c in (' ', '-', '_')).strip() nom_base = nom_base.replace(' ', '_') # 4. Fallback sur un nom générique if not nom_base: nom_base = f"image_{i}" # Limiter la longueur du nom nom_base = nom_base[:100] nom_fichier = os.path.join(dossier_sortie, f"{nom_base}{extension}") # Gérer les doublons compteur = 1 nom_fichier_original = nom_fichier while os.path.exists(nom_fichier): nom_fichier = os.path.join(dossier_sortie, f"{nom_base}_{compteur}{extension}") compteur += 1 # Sauvegarder l'image with open(nom_fichier, 'wb') as fichier: for chunk in reponse_image.iter_content(1024): fichier.write(chunk) print(f"Image téléchargée : {nom_fichier}") else: print(f"Erreur : Impossible de télécharger {url_image}") except Exception as e: print(f"Erreur lors du téléchargement de {url_image} : {e}") # Exemple d'utilisation url = "https://www.7tarot.fr/carte/arcanes-mineurs.htm" telecharger_images(url)