Selenium Web Scraping - Tout ce qu'il faut savoir en 2024

Guides, proxys, Python, Scraping, Mai-06-20225 minutes de lecture

La collecte de données est un terme qui a été largement utilisé au cours de la dernière décennie. Chaque entreprise souhaite connaître parfaitement ses clients afin de pouvoir élaborer la meilleure stratégie pour résoudre leurs problèmes. En général, les organisations à vocation technologique disposent de lacs de données pour obtenir des données à des fins d'analyse. Mais parfois, elles doivent collecter les données en ligne pour

La collecte de données est un terme qui a été largement utilisé au cours de la dernière décennie. Chaque entreprise souhaite connaître parfaitement ses clients afin de pouvoir élaborer la meilleure stratégie pour résoudre leurs problèmes. En général, les organisations à vocation technologique disposent de lacs de données pour obtenir des données à des fins d'analyse. Mais parfois, elles doivent rassembler les données en ligne pour diverses analyses, telles que l'analyse des sentiments, l'analyse du référencement et la surveillance. Le web scraping est l'approche qui consiste à extraire des données d'une source ciblée et à les sauvegarder dans un espace de stockage local ou dans le nuage. Python est le meilleur langage de programmation pour effectuer du web scraping. Il existe de nombreuses bibliothèques en Python qui peuvent vous aider à extraire des données de sites web, de blogs et d'autres sources en ligne. Les plus connues sont BeautifulSoup et Selenium. Dans cet article, nous verrons comment effectuer du web scraping avec Selenium.

Qu'est-ce que le "Web Scraping" ?

Le web scraping consiste à extraire une grande quantité de données de diverses pages web en ligne. De nos jours, les débutants en apprentissage automatique et en intelligence artificielle consacrent beaucoup de temps à l'apprentissage des différentes méthodes de raclage du web. Le web scraping se compose de deux parties, à savoir le crawler et le scraper. Le crawler est chargé de trouver et de localiser les données nécessaires à partir de la source cible, puis le scraper aide à extraire ces données de la source.

Sélénium - Qu'est-ce que c'est ?

Selenium est une bibliothèque python libre et gratuite qui constitue un cadre de test automatisé principalement utilisé pour tester et valider des applications web sur différents navigateurs. Vous pouvez utiliser n'importe quel langage de programmation, tel que C#, Java, et mon préféré, Python. Le logiciel Selenium est une suite d'outils comprenant :

  • Environnement de développement intégré (IDE) Selenium.
  • Télécommande Selenium.
  • Webdriver.
  • Grille Selenium.

Voyons comment utiliser Selenium avec Python pour automatiser l'ensemble du processus de web scraping.

Énoncé du problème :

Notre objectif est de récupérer les noms et les salaires des joueurs de la NBA au cours de la dernière décennie, puis de sauvegarder les données au format data frame. REMARQUE : pour apprendre et expliquer le fonctionnement de Selenium web scraping, nous utilisons le site web hoopshype.

Installation du pilote Chrome :

Avant de commencer le processus de web scraping, il est nécessaire d'installer le pilote Chrome sur votre ordinateur. Le pilote Chrome à installer dépend de la version du navigateur Chrome que vous utilisez. Vous pouvez le vérifier en suivant les étapes suivantes :

ÉTAPE 1 : Ouvrez le navigateur Chrome-> Cliquez sur l'icône "Hamburger", qui se trouve dans le coin supérieur droit du navigateur.

ÉTAPE 2 : Après avoir cliqué sur l'icône " Hamburger ", vous verrez apparaître l'option " Aide ". Cliquez sur "Aide" et sélectionnez "A propos du navigateur Chrome". Une fois que vous aurez fait cela, vous obtiendrez la page de la version. L'image ci-dessous représente la page de version de Google Chrome.

Fenêtre de la version de Google Chrome

Note : Si vous avez des mises à jour, il est préférable de les installer avant d'installer le pilote chrome.

Une fois que vous avez trouvé la version, allez sur le site web du pilote Chrome et téléchargez le pilote en fonction de la version de Chrome que vous avez.

Installer Selenium :

La façon la plus simple d'installer le paquet selenium est de le faire via PIP (Package Installer Python). Vous pouvez ouvrir n'importe quel carnet de notes, que ce soit Juypter ou Google Collab, et taper le code python suivant :

pip install selenium

La commande ci-dessus télécharge tous les paquets de dépendances pour Selenium. Voyons maintenant comment mettre en œuvre le web scraping avec Selenium.

Le scraping web avec Selenium :

Nous recommandons de créer un environnement virtuel et de mettre en œuvre le processus de web scraping pour une meilleure pratique. Dans cet exemple, nous utiliserons le notebook Juypter pour faire du web scraping.

ÉTAPE 1 : Importer toutes les bibliothèques nécessaires. Pandas et Selenium webdriver sont les principales bibliothèques pour le web scraping simple. Le code python permettant d'importer toutes les bibliothèques nécessaires est présenté ci-dessous :

from selenium import webdriver
from selenium.webdriver.common.keys import keys
import pandas as pd

ETAPE 2 : Une fois les bibliothèques importées, l'étape suivante consiste à lancer le pilote Chrome. Le code python suivant permet de lancer le pilote

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

NOTE : Dans l'argument, indiquez le chemin complet de l'emplacement du pilote Chrome sur votre système local.

ÉTAPE 3 : Une fois que vous avez lancé le pilote, le navigateur Chrome devrait s'ouvrir dans une nouvelle fenêtre. Mais la fenêtre doit être vide car il n'y a pas d'URL de flux. Le code python pour l'URL du flux cible est montré ci-dessous :

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(seed_url)

ÉTAPE 4 : Une fois l'URL du flux saisie, dans la nouvelle fenêtre, vous devriez pouvoir voir le site web cible. Le processus suivant consiste à trouver le nom de chaque joueur de la NBA. Dans Selenium, vous pouvez trouver les éléments HTML par les méthodes suivantes :

  • ID
  • Sélecteur CSS
  • Sélecteur XPATH
  • Nom
  • Nom de la classe
  • Nom de l'étiquette

Dans notre exemple, nous allons voir comment détecter les éléments à l'aide du sélecteur XPATH. Nous voulons extraire deux détails de ces données :

  • Nom du joueur
  • Salaire

Remarque : il est également possible d'utiliser le formulaire de recherche pour trouver des éléments web. Le formulaire de recherche se trouve au bas de la page Inspecter.

ÉTAPE 5 : Lorsque vous arrivez sur la page cible, vous devriez voir une liste de joueurs et leurs salaires pour les saisons (années). Sélectionnez l'un des noms de joueurs et cliquez dessus avec le bouton droit de la souris. Plusieurs options s'offrent à vous. Dans ces options, cliquez sur "Inspecter". L'image ci-dessous représente la page Inspecter.

Inspecter la page du site cible

Or, comme indiqué plus haut, l'objectif est d'extraire les noms des joueurs. La première étape consiste donc à trouver un élément de joueur unique et le facteur commun à tous les éléments de joueur. Dans le même processus, cliquez avec le bouton droit de la souris sur le nom du joueur et inspectez-le. Cela devrait vous amener directement à l'emplacement de votre élément. Au lieu de prendre le nom d'un joueur dans notre scénario, nous prenons le nom de tous les joueurs. L'élément commun à tous les joueurs est "td class-'name'". Par conséquent, si nous utilisons cet élément et le mettons en boucle, nous obtiendrons les noms de tous les joueurs. Le code python permettant d'extraire le nom d'un joueur est illustré ci-dessous :

nba_players = driver.find_elements_by_xpath('//td[@class="name"]')
players_list = []
for p in range(len(nba_players)) :
    players_list.append(nba_players[p].text)
print(liste_joueurs)

Explication : Comme indiqué ci-dessus, nous trouvons l'élément de code HTML en utilisant l'approche XPATH. Il est évident que nous avons besoin du chemin XPATH de plusieurs éléments. Le plus simple est de trouver l'élément name, qui est "td class-name". Cliquez avec le bouton droit de la souris sur l'élément et sélectionnez "Copier". Vous devriez avoir plusieurs options, telles que copier le chemin JS et copier XPATH. Sélectionnez copier XPATH, et vous devriez obtenir automatiquement l'emplacement XPATH de l'élément. Collez le chemin dans l'argument find_elements_by_XPATH. Une fois le chemin collé, Python devrait commencer à identifier ces éléments et à obtenir leur adresse, mais pas leur nom. Pour obtenir les noms réels des joueurs, nous allons boucler la fonction et ajouter les résultats à une liste vide en sortie. Une fois que vous aurez exécuté l'extrait de code ci-dessus, vous devriez obtenir le résultat indiqué dans l'image ci-dessous.

Sortie pour l'extraction du nom des joueurs

Maintenant que nous avons les noms des joueurs, l'étape suivante consiste à obtenir leurs salaires respectifs. Le processus exact d'extraction du nom est effectué pour obtenir les détails du salaire.

ÉTAPE 6 : Les données salariales sont extraites à l'aide du code python, comme indiqué ci-dessous :

players_salary=driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]')
salary_list=[]
for s in range(len(players_salary)) :
    salary_list.append(players_salary[s].text)
print(liste_salaire)

Explication : Le processus est le même. La seule différence est l'élément commun aux acteurs. L'élément web "td class-'hh-salaries-sorted'" est l'élément commun. Après avoir trouvé l'élément, nous créons une liste vide pour boucler l'ensemble de la fonction et ajouter les détails du salaire à la liste vide. Le résultat devrait ressembler à l'image ci-dessous :

Sortie pour l'extraction du salaire des joueurs

ÉTAPE 7 : Nous avons maintenant récupéré les données de notre cible. Mais si vous regardez bien, les données ne concernent qu'une seule saison (l'année en cours). L'énoncé de notre problème indique qu'il faut extraire les données de la dernière décennie. C'est ici que l'automatisation du navigateur entre en jeu. Il n'y a pas lieu de s'inquiéter. Nous pouvons utiliser le même code pour la saison en tant que fonction de boucle. Le code python permettant d'automatiser le processus de scraping et d'obtenir les données pour la dernière décennie est illustré ci-dessous :

for i in range(2010,2021) :
    numéro de page = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + numéro_de_page
    driver.get(feed_url)
    
    joueurs = driver.find_elements_by_xpath('//td[@class="name"]')
    salaires = driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]') 
    
    joueur = []
   for j in range(len(players)) :
        player.append(players[j].text)
    
    salaire = []
   for k in range(len(salaries)) :
        salary.append(salaries[k].text)

Explication : Comme indiqué plus haut, notre objectif est d'obtenir les données des dix dernières années. Pour ce faire, nous devons mettre en œuvre la pagination. La pagination consiste à ajouter des numéros consécutifs, généralement des numéros de page, pour identifier la séquence d'ordre de la page. Les saisons sont représentées dans le format AAAA/MM. Pour le reconnaître, nous utilisons la technique de la concaténation. Ensuite, nous utilisons le même processus et le même code dans la boucle.

ÉTAPE 8 : La dernière étape consiste à enregistrer les données dans le cadre de données pour diverses analyses, telles que l'analyse des sentiments et l'analyse de la concurrence. Le code python permettant de sauvegarder les données dans la base de données est illustré ci-dessous :

df = pd.DataFrame(columns=['Player', 'Salary','Year'])
data = list(zip(joueur[1 :],salaire[1 :])) 
df1 = pd.DataFrame(data, columns=['Player', 'Salary']) 
df1['Année'] = i
df = df.append(df1)

REMARQUE : dans la deuxième ligne du code, vous pouvez voir que j'ai procédé à un découpage en tranches. La raison en est que lorsque vous voyez le résultat pour les noms et les salaires des joueurs, le premier index, c'est-à-dire l'index 0, était le "JOUEUR" et la "DATE". Ces éléments n'apportent pas grand-chose au tableau. Nous pouvons donc les supprimer.

Explication : Nous avons créé un cadre vide avec les colonnes "Joueur", "Salaire" et "Année". Nous accumulons toutes les données dans une liste unique avec la fonction Zip pour ajouter la liste au cadre de données. Une fois les données ajoutées au cadre de données, il est temps de terminer l'automatisation et de fermer le pilote. Vous pouvez enregistrer le cadre de données dans un fichier CSV pour un référentiel de données si nécessaire.

Vous avez réussi à faire de l'automatisation et du web scraping à l'aide de Selenium et de Python. Vous avez réussi à faire de l'automatisation et du web scraping en utilisant Selenium et Python.

FAQs :

1. Selenium est-il adapté au web scraping ?
Oui, si vous envisagez de récupérer des pages web dynamiques, qui utilisent JavaScript. Mais c'est également une bonne option pour Python. Selenium est un bon point de départ pour les débutants intéressés par le web scraping.
2. Quel est le meilleur produit, BeautifulSoup ou Selenium ?
Cette réponse est basée sur le type de page web cible et l'ampleur de votre projet. Si vous cherchez à récupérer une petite page statique bien structurée, BeautifulSoup est la meilleure solution. Si votre projet implique des pages web dynamiques complexes et structurées, selenium web scraping peut être la meilleure option.
3. Quels sont les meilleurs outils pour le web scraping ?
Python est l'outil le meilleur et le plus favorable pour effectuer du web scraping. Les bibliothèques Python, telles que BeautifulSoup, Selenium et Request, ainsi que d'autres outils, tels que Scrapy, sont les meilleurs outils pour le web scraping.

Conclusion :

Cet article montre comment installer un pilote Chrome sur votre système local afin d'automatiser un petit processus de scraping web. En temps réel, la manipulation d'une grande quantité de données (en termes de taille, comme MB, GB, et parfois TB) implique des étapes complexes. Selenium est un bon point de départ pour les débutants qui s'intéressent à la collecte de données, au processus de grattage d'écran et à la science des données en général. Comme nous l'avons mentionné, un processus complexe de web scraping nécessite beaucoup de temps pour collecter les données. La plupart des sites web n'autorisent pas le web scraping pendant une période prolongée ; une fois ce seuil atteint, le site web bloquera probablement votre adresse IP et arrêtera votre processus de web scraping. Pour éviter de telles difficultés, il est recommandé d'utiliser un proxy. ProxyScrape Le site proxys fournit d'excellentes adresses résidentielles qui conviennent le mieux aux tâches à forte demande, comme le web scraping.

AVERTISSEMENT : Cet article est strictement destiné à des fins d'apprentissage. Si les lignes directrices appropriées ne sont pas respectées, l'utilisation du web scraping peut être illégale. Cet article ne soutient en aucun cas le web scraping illicite.