Initial system import
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user