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()
ouwebdriver.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()
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 classeBy
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 fonctionsleep()
pour faire des pauses dans l’exécution.
from selenium.webdriver.chrome.options import Options
importe la classeOptions
pour configurer les options du navigateur Chrome.Configurer les options du navigateur
On crée un objetoptions = 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 bouclewhile 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 avecquote.find_element(By.CLASS_NAME, "text").text
L’auteur avecquote.find_element(By.CLASS_NAME, "author").text
Les tags associés, en créant une liste des textes des éléments de classetag
.
On affiche ensuite un dictionnaire contenant ces informations.
Passer à la page suivante
On tente de trouver un bouton "Next" avecdriver.find_element(By.LINK_TEXT, "Next")
:
Si le bouton est trouvé, on clique dessus avecnext_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 avecbreak
.
Fermer le navigateur
driver.quit()
ferme proprement la session du navigateur.