Dans le monde actuel axé sur les données, la méthode traditionnelle de collecte manuelle des données est dépassée. Un ordinateur avec une connexion internet sur chaque bureau a fait du web une énorme source de données. La méthode moderne de collecte de données la plus efficace et la plus rapide est donc le “web scraping”. Et pour ce qui est du web scraping, Python dispose d’un outil appelé Beautiful Soup. Dans cet article, je vais vous guider à travers les étapes d’installation de Beautiful Soup pour commencer à faire du web scraping.

Avant d’installer et de travailler avec Beautiful Soup, voyons pourquoi vous devriez l’adopter.

Qu’est-ce que Beautiful Soup ?

Imaginons que vous fassiez une recherche sur “l’impact de COVID sur la santé des gens” et que vous ayez trouvé quelques pages web contenant des données pertinentes. Mais que se passe-t-il si ces pages ne vous offrent pas la possibilité de télécharger leurs données en un seul clic ? C’est là que Beautiful Soup entre en jeu.

Beautiful Soup fait partie de l’index des bibliothèques Python permettant d’extraire les données des sites ciblés. Elle est plus à l’aise pour récupérer des données à partir de pages HTML ou XML.

Leonard Richardson a lancé l’idée de Beautiful Soup pour le scraping du web en 2004. Mais sa contribution au projet se poursuit encore aujourd’hui. Il est fier de mettre à jour chaque nouvelle version de Beautiful Soup sur son compte Twitter.

Bien que Beautiful Soup for web scraping ait été développé avec Python 3.8, il fonctionne parfaitement avec Python 3 et Python 2.4.

webscrapingapi-1

Les sites web utilisent souvent une protection captcha pour protéger leurs données des outils d’intelligence artificielle. Dans ce cas, quelques modifications de l’en-tête “user-agent” dans Beautiful Soup ou l’utilisation d’API de résolution de captcha peuvent imiter un navigateur fiable et tromper l’outil de détection.

Toutefois, si vous n’avez pas le temps d’explorer Beautiful Soup ou si vous souhaitez que le scraping soit effectué efficacement et facilement, ne manquez pas de consulter cette API de scraping web, , où il vous suffit de fournir une URL pour obtenir les données dans vos mains.

Si vous êtes déjà programmeur, l’utilisation de Beautiful Soup pour le scraping ne vous posera pas de problème en raison de sa syntaxe simple pour naviguer dans les pages web et extraire les données souhaitées sur la base d’une analyse conditionnelle. En même temps, c’est un outil convivial pour les débutants.

Bien que Beautiful Soup ne soit pas destiné au scraping avancé, il fonctionne mieux pour extraire les données de fichiers écrits dans des langages de balisage.

Une documentation claire et détaillée est un autre point fort de Beautiful Soup.

Trouvons un moyen facile d’installer Beautiful Soup sur votre machine.

Comment installer Beautiful Soup pour le Web Scraping ?

Pip – Un gestionnaire de paquets Python sans effort développé en 2008 est maintenant un outil standard parmi les développeurs pour installer n’importe quelle bibliothèque Python ou dépendance.

Pip est livré par défaut avec l’installation des versions récentes de Python. Par conséquent, si des versions récentes de Python sont installées sur votre système, vous êtes prêt à partir.

Ouvrez l’invite de commande et tapez la commande pip suivante pour installer instantanément beautiful Soup.

pip install beautifulsoup4

Vous verrez quelque chose de similaire à la capture d’écran suivante sur votre écran.

installbeautifulsoup-1

Assurez-vous d’avoir mis à jour le programme d’installation de PIP à la dernière version pour éviter les erreurs courantes.

La commande pour mettre à jour l’installateur pip à la dernière version est la suivante :

pip install --upgrade pip

Nous avons couvert avec succès la moitié du chemin parcouru dans ce billet.

Vous avez maintenant installé Beautiful Soup sur votre machine, alors plongeons dans son utilisation pour le web scraping.

Comment importer et travailler avec Beautiful Soup pour le Web Scraping ?

Tapez la commande suivante dans votre IDE python pour importer Beautiful Soup dans le script python en cours.

from bs4 import BeautifulSoup

Maintenant, Beautiful Soup est dans votre fichier Python à utiliser pour le scraping.

Regardons un exemple de code pour apprendre comment extraire les données souhaitées avec beautiful Soup.

Nous pouvons demander à Beautiful Soup de rechercher des balises HTML spécifiques dans le site web source et d’extraire les données présentes dans ces balises.

Dans cet article, j’utiliserai marketwatch.com, qui met à jour en temps réel les prix des actions de différentes sociétés. Extrayons quelques données de ce site web pour vous familiariser avec la bibliothèque Beautiful Soup.

Importez le paquetage “requests” qui nous permettra de recevoir et de répondre aux requêtes HTTP et “urllib” pour charger la page web à partir de son URL.

from urllib.request import urlopen
import requests

Enregistrez le lien de la page web dans une variable afin de pouvoir y accéder facilement ultérieurement.

url = 'https://www.marketwatch.com/investing/stock/amzn'

L’étape suivante consiste à utiliser la méthode“urlopen” de la bibliothèque“urllib” pour stocker la page HTML dans une variable. Passez l’URL à la fonction“urlopen” et enregistrez le résultat dans une variable.

page = urlopen(url)

Créez un objet Beautiful Soup et analysez la page web souhaitée à l’aide de la fonction “html.parser”.

soup_obj = BeautifulSoup(page, 'html.parser')

Le script HTML complet de la page web ciblée est maintenant stocké dans la variable ‘soup_obj’.

Avant de continuer, regardons le code source de la page ciblée pour en savoir plus sur le script HTML et les balises.

Cliquez avec le bouton droit de la souris n’importe où sur la page web. Vous trouverez alors une option d’inspection, comme indiqué ci-dessous.

webscraping

Cliquez sur inspecter pour afficher le code source.

webscraping

Dans le code source ci-dessus, vous pouvez trouver des balises, des classes et des informations plus spécifiques sur chaque élément visible sur l’interface du site web.

La méthode “find” de beautiful Soup nous permet de rechercher les balises HTML demandées et de récupérer les données. Pour ce faire, nous donnons le nom de la classe et les balises à la méthode qui extrait les données spécifiques.

Par exemple, “Amazon.com Inc.” affiché sur la page web a le nom de classe : ‘company__name’ étiqueté sous ‘h1’. Nous pouvons saisir ces informations dans la méthode “find” pour extraire l’extrait HTML pertinent dans une variable.

name = soup_obj.find('h1', attrs={'class' : 'company__name'})

Produisons le script HTML stocké dans la variable “name” et le texte requis à l’écran.

print(nom)

print(nom.texte)
beautifulsoupscrapper

Vous pouvez voir les données extraites s’afficher à l’écran.

Scraper le site web IMDb

Beaucoup d’entre nous consultent les classements des films sur le site IMBb avant de les regarder. Cette démonstration vous donnera une liste des films les mieux notés et vous aidera à vous habituer à la belle Soup pour le web scraping.

Étape 1 : Importez les bibliothèques BeautifulSoup et Requests.

from bs4 import BeautifulSoup
import requests

Etape 2 : Assignons l’URL que nous voulons scraper à une variable appelée ‘url’pour un accès facile dans le code.

Le paquetage“requests” est utilisé pour obtenir la page HTML à partir de l’URL.

url = requests.get('https://www.imdb.com/search/title/?count=100&groups=top_1000&sort=user_rating')

Étape 3 : Dans l’extrait de code suivant, nous allons analyser la page HTML de l’URL actuelle pour créer un objet BeautifulSoup.

soup_obj = BeautifulSoup(url.text, 'html.parser')

La variable “soup_obj” contient maintenant le script HTML complet de la page web désirée, comme dans l’image suivante.

imdbwebscrape

Inspectons le code source de la page web pour trouver le script HTML des données que nous voulons récupérer.

Placez le curseur sur l’élément de la page web que vous souhaitez extraire. Cliquez ensuite avec le bouton droit de la souris et choisissez l’option “inspecter” pour afficher le code source de cet élément spécifique. Les images suivantes vous guideront mieux.

beautifulsoupforscraping

La classe “lister-list” contient toutes les données relatives aux films les mieux notés sous forme de sous-divisions dans des balises div successives.

Dans le script HTML de chaque carte de film, sous la classe ‘lister-item mode-advanced’, nous avons une balise ‘h3’ qui stocke le nom du film, le rang et l’année de sortie, comme le montre l’image ci-dessous.

beautifulsoupscraping

Remarque : La méthode “find” de beautiful Soup recherche la première balise qui correspond au nom qui lui a été donné en entrée. Contrairement à “find”, la méthode “find_all” recherche tous les tags qui correspondent à l’entrée donnée.

Étape 4 : Vous pouvez utiliser les méthodes “find” et “find_all” pour enregistrer le script HTML du nom, du rang et de l’année de chaque film dans une variable de liste.

top_movies = soup_obj.find('div',attrs={'class' : 'lister-list'}).find_all('h3')

Etape 5 : Bouclez la liste des films stockés dans la variable : “top_movies” et extraire le nom, le rang et l’année de chaque film au format texte à partir de son script HTML à l’aide du code ci-dessous.

for movie in top_movies :
    nom_du_film = film.a.text
    rang = movie.span.text.rstrip('.')
    year = movie.find('span', attrs={'class' : 'lister-item-year text-muted unbold'})
    year = year.text.strip('()')
    print(nom_mobile " ", rang " ", année " ")

Dans la capture d’écran de sortie, vous pouvez voir la liste des films avec leur nom, leur rang et leur année de sortie.

imdbscrapeddata

Vous pouvez facilement transférer les données imprimées dans une feuille Excel avec un peu de code python et les utiliser pour votre analyse.

Mot de la fin

Cet article vous guide dans l’installation de Soup pour le web scraping. De plus, les exemples de scraping que j’ai montrés devraient vous aider à démarrer avec Beautiful Soup.

Si vous êtes intéressé par l’installation de Beautiful Soup pour le web scraping, je vous recommande vivement de consulter ce guide compréhensible pour en savoir plus sur le web scraping en utilisant Python.