Tutoriel étape par étape : Comment récupérer des images en utilisant Python

Guides, Comment faire, Le scraping, Sep-05-20245 minutes de lecture

Dans cet article de blog, nous vous guiderons à travers le processus de récupération d'images à partir de sites Web à l'aide de Python. Vous apprendrez à démarrer avec les bibliothèques les plus courantes, à gérer les pièges potentiels et même à explorer des techniques avancées pour faire passer vos compétences en matière de web scraping au niveau supérieur.

Les bases du scraping d'images avec Python

Pour commencer à faire du scraping d'images avec Python, vous devez vous familiariser avec quelques bibliothèques clés qui facilitent cette tâche. Les choix les plus populaires sont BeautifulSoup, Scrapy et Requests.

BeautifulSoup pour l'extraction d'URL d'images

BeautifulSoup est une bibliothèque Python utilisée pour analyser les documents HTML et XML. Elle crée un arbre d'analyse à partir des codes sources des pages qui peut être utilisé pour extraire facilement des données.

Voici un exemple simple d'extraction d'URL d'images à l'aide de BeautifulSoup :

Étape 1 : Installer BeautifulSoup et Requests :

 pip install bs4 requests

Étape 2 : Extraire les URL des images :

 import requests
 from bs4 import BeautifulSoup

 url = 'https://books.toscrape.com/'

 response = requests.get(url)

 soup = BeautifulSoup(response.text, 'html.parser')
 images = soup.find_all('img')

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

Télécharger des images avec Python

Une fois que vous avez extrait les URL des images, l'étape suivante consiste à les télécharger. La bibliothèque Requests est parfaite pour cette tâche en raison de sa simplicité et de sa facilité d'utilisation.

Utilisation de requêtes pour télécharger des images

Voici comment télécharger des images à l'aide de Requests :

Télécharger l'image à partir de l'URL :

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

Ce script envoie une requête GET à l'URL de l'image et écrit le contenu binaire de l'image dans un fichier.

Gestion des erreurs et des exceptions

Il est important de gérer les erreurs et les exceptions afin de garantir le bon fonctionnement de votre script, même lorsque des problèmes surviennent. Voici une version améliorée du script précédent :

Gestion des erreurs :

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

Cet extrait de code comprend un bloc "try-except" qui permet de détecter toute erreur pouvant survenir au cours du processus de téléchargement.

Techniques avancées d'exploration d'images

Pour les tâches de scraping plus complexes, telles que le scraping de plusieurs pages ou de sites web entiers, Scrapy est une bibliothèque puissante qui peut gérer ces scénarios de manière efficace.

Utiliser Scrapy pour des tâches complexes

Scrapy est un framework open-source et collaboratif de web crawling pour Python. Il est conçu pour être rapide et efficace, ce qui le rend idéal pour les projets de scraping à grande échelle.

Étape 1 : Installer Scrapy :

 pip install scrapy

Étape 2 : Créer un projet Scrapy :

 scrapy startproject image_scraper
 cd image_scraper

Étape 3 : Définir une araignée :

Créez un fichier spider (`spiders/image_spider.py`) avec le contenu suivant :

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

Ce simple spider Scrapy démarre à l'URL donnée, extrait toutes les URL d'images et suit les liens de la page suivante pour continuer le scraping.

Améliorer vos projets d'extraction d'images

Pour améliorer encore vos projets de scraping, envisagez d'utiliser des API pour accéder à des images de haute qualité et d'automatiser vos tâches pour plus d'efficacité.

Utilisation d'API pour l'extraction d'images

Les API constituent un moyen fiable et légal d'accéder aux images. De nombreux sites web proposent des API qui vous permettent de rechercher et de télécharger des images de manière programmatique. L'un de ces sites est Unsplash API.

Exemple avec l'API Unsplash :

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

Ce script utilise l'API Unsplash pour récupérer une image aléatoire de la nature.

Automatiser les tâches d'extraction d'images

L'automatisation permet de gagner du temps et de s'assurer que les tâches de scraping se déroulent sans intervention manuelle. Des outils tels que les tâches cron sur les systèmes Unix ou le planificateur de tâches sur Windows peuvent programmer l'exécution de vos scripts à intervalles réguliers.

Travaux Cron sur les systèmes Unix - Crontab :

Crontab est un utilitaire puissant des systèmes d'exploitation de type Unix qui permet de planifier des tâches, appelées"travaux cron", afin qu'elles s'exécutent automatiquement à des moments précis. Voyons comment programmer une tâche à l'aide de Crontab.

Comprendre la syntaxe de Crontab :

Un fichier crontab se compose de lignes de commande, chaque ligne représentant une tâche distincte. La syntaxe est la suivante :

MIN HEURE DOM MON DOW CMD
  • MIN : Champ des minutes (0 à 59)
  • HOUR : Champ de l'heure (0 à 23)
  • DOM: Jour du mois (1 à 31)
  • MON : Champ du mois (1 à 12)
  • DOW : Jour de la semaine (0 à 7 où 0 et 7 représentent le dimanche)
  • CMD : La commande à exécuter (dans ce cas, il s'agit de l'exécutable de votre script python).

Voici un exemple d'exécution d'un script python tous les jours à 20h00

0 20 * * * * /usr/bin/python3/path/to/Image_Scraper.py

Utilisation du planificateur de tâches (Windows) :

  • Ouvrez le Planificateur de tâches (utilisez la barre de recherche de Windows et cherchez "Planificateur de tâches").
  • Cliquez sur"Créer une tâche de base"
  • Indiquez un nom et une description et cliquez sur"Suivant"
  • Sélectionnez la granularité ou l'intervalle dont vous avez besoin pour exécuter cette tâche et cliquez sur"Suivant"
  • Assurez-vous que l'option "Démarrer un programme" est cochée et cliquez sur"Suivant"
  • Indiquez le chemin d'accès à votre script python en cliquant sur"Parcourir". Si vous devez fournir des arguments pour votre script python, vous pouvez le faire en les ajoutant dans les champs"Ajouter des arguments" et cliquer sur"Suivant".
  • La dernière étape consiste à cliquer sur"Terminer" et, comme cela, cette tâche est prête à s'exécuter dans l'intervalle spécifié.

Conclusion

Dans cet article de blog, nous avons exploré comment récupérer des images sur des sites web en utilisant Python. Nous avons couvert les bases avec BeautifulSoup et Requests, les techniques avancées avec Scrapy, et les pratiques éthiques de scraping. En outre, nous avons discuté de la manière d'améliorer vos projets de scraping en utilisant des API et des outils d'automatisation tels que le planificateur de tâches Windows.

Le scraping d'images est une compétence puissante qui peut améliorer vos capacités d'acquisition de données et ouvrir de nouvelles possibilités pour vos projets.

Bon grattage !