Files
fvtt-hamalron/scripts/download-pic.py
T
2025-12-25 23:08:06 +01:00

87 lines
3.3 KiB
Python

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)