1 - Qu'est-ce que BeautifulSoup ?
BeautifulSoup est une bibliothèque python qui permet d'extraire des informations d'un site web, ou d'un document XML, avec quelques lignes de code. Le module BeautifulSoup fonctionne généralement avec le module Request, à cet effet on doit préalablement installer ce dernier via la commande pip:
1 |
pip install requests |
2 - Comment installer BeatifulSoup ?
L'installation de beautifulsoup est une opération assez simple, il suffit d'utiliser l'utilitaire de ligne de commande pip et de taper :
1 |
pip install beautifulsoup4 |
Vous devez aussi installer d'autres modules importants qui sont nécessaires au bon fonctionnement de beatifulsoup :
Installez le module lxml :
1 |
pip install lxml |
Installez le module html5lib :
1 |
pip install html5lib |
3 -Extraire des informations d'un site Web avec BeautifulSoup
3.1 - Extraire des données avec la méthode find_all()
Nous allons voir par exemple comment récupérer le contenu de toutes les balises h2 à partir d'une adresse url donnée:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#coding: utf-8 import requests from bs4 import BeautifulSoup req = requests.get('https://www.tresfacile.net/') soup = BeautifulSoup(req.text, "lxml") for h2_tag in soup.find_all('h2'): print(h2_tag.text) """ Ce qui affiche la liste des textes écrits en h2: Rechercher Cours Python – Django Exercices & Projets En Python Réseaux Informatiques Dart & Flutter Cours Java Développement Web Bases de données Utilisateurs En Ligne ! Se connecter """ |
Exemple: obtenir les textes avec des liens
1 2 3 4 5 6 7 8 9 10 |
import requests from bs4 import BeautifulSoup as bs req = requests.get('https://www.tresfacile.net/') soup = bs(req.text, "lxml") for link in soup.find_all('a'): print(link.text) # affiche tous les textes ayant des liens |
3.2 Extraire des données de balises selon des attributs spécifiques
Avec la méthode find_all() on peut aussi recherche le contenu des balise ayant un attribut spécifique:
Syntaxe:
1 |
.find( tag_name , attribut = "valeur") |
Exemple (recherche de contenu des balises div ayant la classe "menuSD")
1 2 3 4 5 6 7 8 9 10 |
#coding: utf-8 import requests from bs4 import BeautifulSoup req = requests.get('https://www.tresfacile.net/') soup = BeautifulSoup(req.text, "lxml") tag = soup.find_all('div' , class_ ="menuSD") print(tag) # affiche la totalité des balises <div> avec leurs contenus complets print(tag[0].text # affiche le contenu de la première balise <div> ayant la classe "menuSD" |
3.3 Extraire des données à l'aide de la méthode find()
Nous avons vue dans le paragraphe précédent la méthode find_all() qui permet d'extraire la liste des contenus selon la requête utilisée. La méthode find() est semblable à la méthode find_all() à la différence qu'elle extrait seulement le contenu de la première balise rencontrée.
Exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#coding: utf-8 import requests from bs4 import BeautifulSoup req = requests.get('https://www.tresfacile.net/') soup = BeautifulSoup(req.text, "lxml") a = soup.find('a') b = soup.find('a')["href"] print('b = ' , b) # affiche le lien hypertexte de la première balise de lien <a href=""> print(a) # affiche la première balise de lien <a href=""> print(a.text)# affiche le contenu texte de la première balise de lien <a href=""> # recherche par attribut class_ = , id="" ... tag = soup.find(class_ ="menuSD") print(tag) # affiche la première balise <div> ayant la classe "menuSD" avec contenu print(tag.text) # affiche le contenu de la première balise <div> ayant la classe "menuSD" |
Younes Derfoufi
CRMEF OUJDA
1 thought on “Module BeautifulSoup & Scrapping Web”