Récupérer des données avec Selenium

Selenium est une bibliothèque Python utilisée pour automatiser l’interaction avec des pages web dynamiques. Contrairement à BeautifulSoup et Scrapy, qui sont principalement utilisés pour scraper des pages statiques, Selenium est particulièrement utile pour récupérer des données sur des sites web qui utilisent du JavaScript pour charger du contenu. En simulant un navigateur web réel, Selenium permet d’interagir avec la page, de cliquer sur des boutons, de remplir des formulaires, et de récupérer des informations une fois que le contenu est chargé dynamiquement. C’est une solution idéale pour les pages nécessitant des actions utilisateur avant de rendre leur contenu ou lorsque des interactions complexes sont nécessaires pour accéder aux données.

Fonctions :

  • selenium.webdriver.Chrome

    Selenium est un outil pour l'automatisation des navigateurs web, permettant de simuler des interactions avec des pages web (cliquer, remplir des formulaires, récupérer des données). Il est utile notamment pour scraper des pages générées dynamiquement par JavaScript.

    Importation :

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys

    Attributs :

    Paramètre Description
    driver Instance de webdriver.Chrome() ou webdriver.Firefox(), utilisée pour contrôler le navigateur.
    find_element_by_* Méthodes permettant de localiser un élément HTML dans la page (par exemple, find_element_by_id, find_element_by_xpath, etc.).
    get() Méthode pour ouvrir une URL dans le navigateur contrôlé par Selenium.
    page_source Attribut qui permet de récupérer le code source HTML complet de la page après exécution de JavaScript.
    quit() Méthode pour fermer le navigateur contrôlé par Selenium.

    Exemple de code :

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-extensions')
    options.add_argument('--incognito')  # ← Mode navigation privée
    options.add_argument('--headless')   # ← Facultatif : sans interface graphique
    # NE PAS ajouter '--user-data-dir'
    
    driver = webdriver.Chrome(options=options)
    
    # Aller sur la page cible
    driver.get("http://quotes.toscrape.com")
    
    # Récupérer les citations sur plusieurs pages
    while True:
        quotes = driver.find_elements(By.CLASS_NAME, "quote")
        for quote in quotes:
            texte = quote.find_element(By.CLASS_NAME, "text").text
            auteur = quote.find_element(By.CLASS_NAME, "author").text
            tags = [tag.text for tag in quote.find_elements(By.CLASS_NAME, "tag")]
    
            print({
                'texte': texte,
                'auteur': auteur,
                'tags': tags
            })
    
        # Tenter de cliquer sur "Next"
        try:
            next_btn = driver.find_element(By.LINK_TEXT, "Next")
            next_btn.click()
            sleep(1)  # pause pour charger la page suivante
        except:
            break  # pas de bouton "Next", on sort de la boucle
    
    driver.quit()
    Résultat du code

    Explication du code :

    from selenium import webdriver importe le module principal Selenium pour contrôler un navigateur web.
    from selenium.webdriver.common.by import By importe la classe By utilisée pour localiser des éléments HTML.
    from selenium.webdriver.chrome.service import Service importe la classe pour gérer le service ChromeDriver (pas utilisé ici directement).
    from time import sleep importe la fonction sleep() pour faire des pauses dans l’exécution.
    from selenium.webdriver.chrome.options import Options importe la classe Options pour configurer les options du navigateur Chrome.

    Configurer les options du navigateur
    On crée un objet options = Options() pour définir des paramètres : --no-sandbox : désactive le sandboxing, utile dans certains environnements Linux.
    --disable-dev-shm-usage : évite des problèmes liés à la mémoire partagée.
    --disable-extensions : désactive les extensions Chrome.
    --incognito : active le mode navigation privée.
    --headless : lance Chrome sans interface graphique (optionnel).
    On évite d’utiliser --user-data-dir pour ne pas charger un profil utilisateur.
    Initialiser le navigateur
    driver = webdriver.Chrome(options=options) crée une instance Chrome avec les options configurées.
    Accéder à la page cible
    driver.get("http://quotes.toscrape.com") ouvre la page web contenant les citations.
    Extraire les citations sur plusieurs pages
    On utilise une boucle while True: pour parcourir toutes les pages disponibles. driver.find_elements(By.CLASS_NAME, "quote") récupère toutes les citations présentes sur la page courante.
    Pour chaque citation, on récupère :
    Le texte avec quote.find_element(By.CLASS_NAME, "text").text
    L’auteur avec quote.find_element(By.CLASS_NAME, "author").text
    Les tags associés, en créant une liste des textes des éléments de classe tag.
    On affiche ensuite un dictionnaire contenant ces informations.
    Passer à la page suivante
    On tente de trouver un bouton "Next" avec driver.find_element(By.LINK_TEXT, "Next") :
    Si le bouton est trouvé, on clique dessus avec next_btn.click() puis on fait une pause d’une seconde (sleep(1)) pour laisser le temps à la page de charger.
    Si le bouton "Next" n’existe pas (fin des pages), une exception est levée et on sort de la boucle avec break.
    Fermer le navigateur
    driver.quit() ferme proprement la session du navigateur.