{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " URL Name \\\n", "0 https://mushroomobserver.org/1 Xylaria polymorpha \n", "1 https://mushroomobserver.org/2 Xylaria magnoliae \n", "2 https://mushroomobserver.org/3 Xylaria hypoxylon \n", "\n", " image_1 \n", "0 1_Xylaria_polymorpha_1.jpg \n", "1 2_Xylaria_magnoliae_1.jpg \n", "2 3_Xylaria_hypoxylon_1.jpg \n", "Données sauvegardées à D:/Images_champignons/mushroom_data.xlsx\n" ] } ], "source": [ "# J'importe les modules nécessaires pour le script.\n", "import requests # Pour effectuer des requêtes HTTP.\n", "from bs4 import BeautifulSoup # Pour parser le contenu HTML.\n", "import pandas as pd # Pour manipuler et stocker les données sous forme de tableaux.\n", "import os # Pour interagir avec le système de fichiers de l'ordinateur.\n", "import time # Pour introduire des délais dans l'exécution du script.\n", "import random # Pour générer des nombres aléatoires.\n", "\n", "# Je définis les en-têtes HTTP pour simuler une requête d'un navigateur web moderne.\n", "headers = {\n", " 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'\n", "}\n", "\n", "# Je spécifie le chemin du dossier où les images téléchargées seront enregistrées.\n", "img_folder_path = 'D:/Images_champignons'\n", "# Je vérifie si le dossier spécifié existe et sinon, je le crée.\n", "if not os.path.exists(img_folder_path):\n", " os.makedirs(img_folder_path)\n", "\n", "# J'initialise une session de requêtes HTTP pour maintenir les cookies et autres en-têtes à travers les requêtes.\n", "session = requests.Session()\n", "session.headers.update(headers) # J'ajoute les en-têtes définis à la session.\n", "\n", "# Je fixe l'URL de base du site que je souhaite scraper.\n", "base_url = 'https://mushroomobserver.org/'\n", "\n", "# Je prépare une liste pour stocker les données extraites.\n", "data = []\n", "\n", "# Je boucle sur les premières trois pages du site pour l'exemple.\n", "for i in range(1, 4):\n", " # Je construis l'URL de chaque page en combinant l'URL de base avec le numéro de la page.\n", " page_url = f'{base_url}{i}'\n", " # Je récupère un identifiant unique pour chaque page, ici simplement le numéro de la page.\n", " url_reference = str(i)\n", " # Je crée une liste pour stocker les noms des images trouvées sur la page.\n", " img_names = []\n", " \n", " # J'introduis un délai aléatoire entre 1 et 5 secondes avant de faire la requête pour simuler un comportement humain.\n", " sleep_time = random.randint(1, 5)\n", " time.sleep(sleep_time)\n", " \n", " # J'essaie d'effectuer une requête HTTP pour obtenir le contenu de la page.\n", " try:\n", " response = session.get(page_url)\n", " response.raise_for_status() # Je vérifie que la requête a réussi.\n", " soup = BeautifulSoup(response.content, 'html.parser') # Je parse le contenu HTML obtenu.\n", " \n", " # Je cherche le nom du champignon dans la balise