Guide pour effectuer du web scraping avec Selenium

Il s’agit du seul guide pratique détaillé indispensable pour commencer à collecter des données web dans des sites cibles et les enregistrer sous forme de fichiers CSV en moins de 10 minutes
6 min de lecture
How to use Selenium for web scraping

Dans cet article, nous aborderons les sujets suivants :

Le référentiel GitHub correspondant à cet article se trouve ici.

Selenium : ce que c’est, et comment l’utiliser

Selenium est un logiciel « open source » contenant un grand éventail d’outils et de bibliothèques permettant d’effectuer des activités automatisées sur les navigateurs, dont :

  • Actions/extraction d’éléments basés sur des pages web (exemple : « fermer », « retour », « get_cookie », « get_screenshot_as_png », « get_window_size »)
  • Tester les sites 
  • Gérer les alertes et les cookies (ajout/suppression)
  • Envoyer des éléments de formulaire 
  • Collecter des données / web scraping 

Il est compatible avec la plupart des navigateurs, dont Firefox, Chrome, Safari et Internet Browser. Et il peut être utilisé pour écrire des tests dans divers langages de programmation tels que Python, Node.js, C#, JavaScript et PHP. 
Pour vous faciliter la tâche, j’ai inclus un lien vers la bibliothèque de documentation officielle de Selenium 4.1.5.

Puppeteer comparé à Selenium

Pour tous ceux qui se demandent quelle est la différence entre Puppeteer et Selenium, je dirais que Puppeteer est susceptible de mieux vous convenir si vous comptez vous concentrer principalement sur JavaScript et Chrome. En revanche, Selenium peut être un meilleur choix pour vous si vous souhaitez travailler sur plusieurs navigateurs différents afin de tester des applications de navigateur ou de collecter des données web.

Guide pratique détaillé pour extraire des données web avec Selenium

Première étape : installer Selenium

Pour tous ceux qui ont le programme « PIP » (de l’anglais « package installer for Python », soit le programme d’installation groupée pour Python) sur leur ordinateur, il vous suffit de l’ouvrir et de taper :

pip install -U selenium

Sinon, vous pouvez télécharger PyPI, le désarchiver, puis exécuter :

python setup.py install

Notez que vous aurez besoin d’un pilote pour que Selenium puisse communiquer avec le navigateur de votre choix. Pour vous faciliter la tâche, voici les liens de quelques pilotes de navigateur populaires :

Prenons comme exemple le navigateur Firefox. Pour ce faire, ouvrez Firefox, accédez à une page web (par exemple, Yahoo), recherchez « seleniumhq », puis fermez le navigateur. Voici à quoi cela ressemblerait au niveau du code :

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

browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title

elem = browser.find_element(By.NAME, 'p')  # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)

browser.quit()

Deuxième étape : importer des groupes de programmes d’assistance

Selenium ne s’utilise pas de manière isolée mais en association avec d’autres programmes tels que Pandas (outil d’analyse de données « open source » facile à utiliser). Voici ce que vous devez saisir pour effectuer ceci :

from selenium import webdriver
import time
import pandas as pd 

Troisième étape : définir des variables 

Au cours de cette étape, nous allons définir notre dossier cible, notre requête de recherche et notre site cible. Dans cet exemple, nous allons chercher à mettre en correspondance (« mapper ») les différentes offres d’emploi publiées par diverses entreprises concurrentes sur LinkedIn. Voici à quoi doit ressembler ce que vous devez taper :

FILE_PATH_FOLDER = 'F:....Competitive_Analysis'
search_query = 'https://www.linkedin.com/q-chief-financial-officer-jobs.html'
driver = webdriver.Chrome(executable_path='C:/.../chromedriver_win32/chromedriver.exe')
job_details = []

Quatrième étape : inspecter les balises HTML

Les sites HTML possèdent généralement un identifiant unique pour chaque balise associée à des informations affichées sur un site cible donné. La technique consiste ici à tirer parti de cette propriété spéciale du site HTML afin d’explorer le site cible en question. Vous pouvez effectuer ceci en :

  • Effectuant un clic droit n’importe où sur la page, puis en cliquant sur « inspecter »
  • Ensuite, soit en cliquant sur la flèche qui se trouve en haut à gauche, soit en appuyant sur les touches « Ctrl+Shift+C » afin d’inspecter un élément spécifique et obtenir la balise HTML souhaitée 

Voici à quoi cela ressemble :

driver.get(search_query)
time.sleep(5)
job_list = driver.find_elements_by_xpath("//div[@data-tn-component='organicJob']")

Cinquième étape : extraire des points de données spécifiques

Nous allons extraire nos points de données cibles en utilisant l’attribut « find_elements_by_xpath » du pilote web Selenium, puis nous quitterons le pilote et fermerons le navigateur une fois que les données cibles auront été collectées. 

Nous allons cibler les points de données comme ceci :

  • Intitulé du poste
  • Entreprise
  • Lieu de travail
  • Description du poste
  • Date à laquelle l’offre d’emploi a été téléchargée 

Voici à quoi cela ressemble :

for each_job in job_list:
    # Getting job info
    job_title = each_job.find_elements_by_xpath(".//h2[@class='title']/a")[0]
    job_company = each_job.find_elements_by_xpath(".//span[@class='company']")[0]
    job_location = each_job.find_elements_by_xpath(".//span[@class='location accessible-contrast-color-location']")[0]
    job_summary = each_job.find_elements_by_xpath(".//div[@class='summary']")[0]
    job_publish_date = each_job.find_elements_by_xpath(".//span[@class='date ']")[0]
    # Saving job info 
    job_info = [job_title.text, job_company.text, job_location.text, job_summary.text, job_publish_date.text]
 # Saving into job_details
    job_details.append(job_info)
driver.quit()

Veuillez noter que ces sélecteurs peuvent être modifiés par la cible. Les utilisateurs doivent donc confirmer que les sélecteurs en question sont corrects, et non présumer qu’ils le sont.

Sixième étape : sauvegarder les données en vue du résultat final

À ce stade, vous devez ajouter des colonnes à la trame de données et utiliser l’attribut « to_csv » afin de sauvegarder toutes les données obtenues au format CSV, comme ceci :

job_details_df = pd.DataFrame(job_details)
job_details_df.columns = ['title', 'company', 'location', 'summary', 'publish_date']
job_details_df.to_csv('job_details.csv', index=False)

Le fichier CSV de votre choix sera téléchargé à l’emplacement suivant : FILE_PATH_FOLDER

Ça y est ! Vous venez de terminer votre premier « web scraping » avec Selenium.

Intégrer des proxys avec Selenium

En intégrant des proxys dans votre extracteur de données Selenium, vous pouvez :

  • Contourner les restrictions géographiques d’un site 
  • Éviter les blocages, les exclusions et les tests CAPTCHA .  
  • Vous assurer de ne pas recevoir d’informations trompeuses

Commencez par créer un compte Bright Data et par choisir un type de réseau proxy. Rendez-vous ensuite sur Selenium et remplissez le champ « Proxy IP:Port » dans la fonction « setProxy ». Par exemple, tapez « brd.superproxy.io:22225 » à la fois pour HTTP et pour HTTPS.

Sous « sendKeys », entrez l’identifiant de votre compte Bright Data, puis le nom de la zone proxy « brd-customer-CUSTOMER-zone-YOURZONE », puis enfin le mot de passe de votre zone, lequel se trouve dans les paramètres de la zone.