Passer au contenu

Web Scraping avec Selenium et Python : le guide ultime pour 2024

Le Web scraping est le processus d'extraction automatique de données de sites Web à l'aide d'outils logiciels et de scripts. Selenium est l'un des outils les plus populaires utilisés pour le web scraping en raison de ses puissantes capacités d'automatisation Web. Dans ce guide complet, nous explorerons le web scraping avec Selenium à l'aide de Python.

Présentation du Web Scraping

Avant de plonger dans Selenium, comprenons d'abord ce qu'est le web scraping et pourquoi il est utilisé.

Le Web scraping fait référence à des techniques permettant de collecter automatiquement des données sur des sites Web via des scripts et des robots plutôt que par un copier-coller manuel. Les données récupérées sont ensuite structurées et stockées dans une base de données ou une feuille de calcul pour une analyse plus approfondie.

Les cas d’utilisation les plus courants du web scraping incluent :

  • Suivi des prix – Suivez les prix des produits sur les sites de commerce électronique. Aide à détecter les changements et les erreurs de prix.

  • Étude de marché – Recueillez des données sur les concurrents, les produits, les avis, etc. sur le Web.

  • Surveillance de l'actualité – Récupérez les articles et les actualités des sites médiatiques. Utile pour les journalistes et les professionnels des relations publiques.

  • Une recherche – Les spécialistes des sciences sociales utilisent le web scraping pour collecter des données sur les réseaux sociaux à des fins de recherche.

  • Création de base de données – Créez des ensembles de données structurés de contacts de l’entreprise, de spécifications de produits, etc. en grattant des sites Web.

Le web scraping peut permettre d'économiser énormément de temps et d'efforts par rapport à la collecte manuelle de données. Cependant, assurez-vous de respecter l'éthique et de suivre les règles robots.txt d'un site Web.

Pourquoi utiliser Selenium pour le Web Scraping ?

Il existe de nombreux outils disponibles pour le web scraping comme BeautifulSoup, Scrapy, Puppeteer, etc. Cependant, Selenium se démarque lorsque vous avez besoin de :

  • Récupérez les données de sites Web complexes et dynamiques qui chargent du contenu à l'aide de JavaScript.

  • Interagissez avec les sites Web en cliquant sur des boutons, en remplissant des formulaires, etc. avant de gratter.

  • Récupérez les données cachées derrière les formulaires de connexion ou les portes de paiement.

  • Augmentez le scraping pour gérer les grands sites Web comportant des milliers de pages.

Selenium automatise un véritable navigateur Web comme Chrome ou Firefox au lieu de simplement récupérer et analyser le HTML comme la plupart des autres grattoirs Web. Cela permet de récupérer des données dynamiques.

De plus, Selenium s'appuie sur une large communauté et prend en charge plusieurs langages, notamment Python, Java, C# et JavaScript.

Architecture de grattage Web au sélénium

Avant de passer au code, comprenons comment Selenium effectue le web scraping :

Architecture Sélénium pour le Web Scraping

  • Selenium interagit avec le navigateur à l'aide d'un API WebDriver.

  • Le WebDriver lance et contrôle un navigateur comme Chrome.

  • Il exécute du code de scraping et des scripts écrits en Python, Java, etc.

  • Les pages Web sont rendues et traitées par le navigateur.

  • Les données récupérées sont collectées et structurées selon la logique du script.

  • Vous pouvez déployer le scraper sur vos propres machines ou utiliser une plateforme cloud.

Cette architecture permet à Selenium de supprimer même les sites complexes et lourds en JavaScript que des outils tels que Requests ne peuvent pas gérer.

Configuration de Selenium avec Python

Avant de pouvoir commencer le web scraping, nous devons configurer Selenium dans un environnement Python.

Installer Python

Assurez-vous que Python 3.6 ou supérieur est installé sur votre système. Vous pouvez télécharger la dernière version de Python depuis python.org.

Installer Sélénium

Une fois Python installé, exécutez la commande suivante pour installer Selenium :

pip install selenium

Cela installera le package Python Selenium à partir de PyPI.

Installer les pilotes Web

Le Selenium WebDriver permet de contrôler les navigateurs pour le scraping. Vous devez installer le WebDriver pour le navigateur que vous souhaitez utiliser :

Chrome: Télécharger le ChromeDriver qui correspond à votre version de Chrome.

Firefox: Obtenir le Pilote Gecko en fonction de votre version de Firefox.

Edge: Installez le Pilote Web Microsoft.

Assurez-vous que l'exécutable WebDriver se trouve dans le PATH de votre système pour permettre à Selenium de le détecter.

C'est ça! Nous sommes maintenant prêts à commencer le web scraping avec Selenium Python.

Lancement du navigateur

La première étape consiste à lancer le navigateur via Selenium.

Importez Selenium et créez un WebDriver instance en transmettant le chemin d'accès à l'exécutable du pilote du navigateur :

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

Vous pouvez également initialiser une instance de navigateur sans interface graphique qui n'ouvrira pas de fenêtre visible :

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

Ensuite, utilisez le get() méthode pour que l'instance du navigateur accède à une URL :

driver.get(‘https://www.example.com‘)

Le navigateur va maintenant ouvrir la page, afficher du JavaScript, charger du contenu dynamique, etc. Nous pouvons maintenant commencer à gratter !

Localisation des éléments de page

Pour extraire des données des pages, nous devons d’abord trouver les éléments HTML pertinents. Le sélénium fournit le find_element() méthode pour cela :

search_box = driver.find_element(By.NAME, ‘q‘)

Ceci localise l'élément avec l'attribut name="q". Certaines autres stratégies de localisation courantes sont :

  • By.ID – Rechercher par ID d’élément
  • By.XPATH – Rechercher à l’aide d’une requête XPath
  • By.CSS_SELECTOR – Rechercher à l'aide du sélecteur CSS
  • By.CLASS_NAME – Rechercher par nom de classe CSS
  • By.TAG_NAME – Rechercher par nom de balise HTML

Vous pouvez également localiser plusieurs éléments en utilisant find_elements() qui renvoie une liste.

Extraction de texte

Après avoir localisé un élément, vous pouvez extraire son texte à l'aide du text attribut:

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

Cela imprimera le <h1> texte d’en-tête sur la page.

De même, vous pouvez obtenir la valeur des champs de saisie :

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

Pour cliquer sur des liens et des boutons sur une page, utilisez le click() méthode sur l'élément :

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

Cela permet d'interagir avec le contenu paginé, les popups, les modaux, etc.

Remplir des formulaires

Vous pouvez saisir du texte dans des zones de texte et d'autres éléments de saisie en utilisant send_keys():

search_box.send_keys(‘Web Scraping‘)

Cela permet de se connecter à des sites, de soumettre des formulaires, etc. avant de gratter.

Exécution de JavaScript

Selenium permet également d'exécuter du JavaScript directement sur les pages en utilisant execute_script():

driver.execute_script(‘alert("Hello World");‘)

Vous pouvez l'utiliser pour récupérer les données injectées par JavaScript dans le DOM.

En attente du chargement des éléments

Les sites modernes utilisent lourdement AJAX et JavaScript pour charger le contenu de manière dynamique. Parfois, vous devrez peut-être attendre le chargement de certains éléments ou données avant de les supprimer.

Le sélénium a WebDriverWait ainsi que expected_conditions pour gérer ça :

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

Le script attendra désormais jusqu'à 10 secondes pour que l'élément devienne cliquable.

Il existe de nombreuses conditions attendues, telles que la visibilité de l'élément, les chargements AJAX, etc., que vous pouvez utiliser pour gérer le contenu dynamique des pages.

Faire défiler les pages

Pour les longues pages Web, vous devrez peut-être faire défiler vers le bas pour charger du contenu supplémentaire via JavaScript. Le sélénium peut également faire cela :

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

Cela permet de gratter de longues pages Web. La même approche de défilement fonctionne pour supprimer des publications sur Facebook, Twitter et d'autres sites de médias sociaux.

Gestion de la connexion et des paywalls

Certains sites nécessitent d'abord une connexion avant de procéder au scraping ou peuvent avoir des paywalls restreignant l'accès.

Vous pouvez utiliser Selenium pour saisir des informations d'identification, contourner les paywalls et accéder aux informations restreintes à des fins de scraping :

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

Cela permet de se connecter à des sites comme Amazon, eBay, etc. pour récupérer le contenu sécurisé.

Exemple de grattage Web au sélénium

Rassemblons tout cela dans un script de grattage Web Selenium :

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

Ce script :

  • Lance Chrome et accède à example.com
  • Clique sur la bannière de consentement aux cookies pour activer le scraping
  • Attend que les résultats soient chargés
  • Extrait les textes de titre et les imprime

Vous pouvez améliorer cela avec le défilement, les capacités de connexion, etc. pour créer de puissants scrapers !

Conseils pour un scraping Web efficace avec Selenium

Voici quelques conseils pour améliorer votre productivité de web scraping avec Selenium :

  • Utiliser un navigateur sans tête pour un scraping plus rapide sans avoir besoin de restituer et d'afficher l'interface utilisateur

  • Limitez les actions inutiles comme ouvrir de nouveaux onglets, survoler les interactions, etc. pour gratter plus rapidement

  • Attendez le chargement des pages et AJAX requêtes à compléter avant d'extraire les données

  • Faire défiler progressivement lorsque vous grattez de longues pages pour éviter de tout charger en même temps

  • Utiliser les sélecteurs CSS pour la lisibilité et la performance lors de la localisation des éléments

  • Réessayez en cas d'erreur au lieu de s'arrêter complètement pour rendre les grattoirs plus robustes

  • Demandes de limitation pour éviter de surcharger les serveurs et d'être bloqué

  • Exécutez dans le cloud utiliser des services comme Selenium Grid pour la fiabilité et l'évolutivité

Alternatives au sélénium pour le scraping Web

Voici quelques autres outils populaires de web scraping que vous pouvez consulter :

  • Belle soupe – Bibliothèque Python leader pour le scraping HTML et XML

  • Scrapy – Cadre d'exploration Web rapide pour les grands projets de scraping

  • Marionnettiste – Bibliothèque de scraping Chrome sans tête pour les développeurs JavaScript

  • Dramaturge – Scrape à l’aide des navigateurs Chromium, Firefox et WebKit

  • Apifier – Plateforme de scraping Web évolutive avec proxys intégrés et Chrome sans tête

Chaque outil a ses propres forces et faiblesses. Évaluez-les par rapport à votre cas d’utilisation spécifique lors de la sélection d’une solution de web scraping.

Conclusion

Selenium est un outil polyvalent permettant de créer des scrapers Web robustes en Python et dans d'autres langages. Il ouvre des possibilités telles que le scraping de sites JavaScript, la gestion de contenu dynamique, l'accès à des données restreintes, etc., qui seraient autrement difficiles.

Assurez-vous de suivre des pratiques de scraping éthiques et de respecter les restrictions des sites Web lorsque vous utilisez Selenium. Ne surchargez pas les serveurs avec un scraping agressif.

Grâce à la puissance de Selenium, de Python et des stratégies de sound scraping, vous pouvez extraire d'énormes quantités de données utiles du Web pour les applications de business intelligence, de recherche et de science des données.

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *