Beautiful Soup est une bibliothèque Python open-source puissante pour analyser et extraire des données de fichiers HTML ou XML. Idéale pour les débutants en web scraping, elle utilise des parseurs robustes pour récupérer le contenu des pages web de manière précise et contrôlée.
Avec Beautiful Soup, extrayez facilement n'importe quel élément d'une page web. Ce tutoriel détaillé vous guide pas à pas pour scraper un site web efficacement, en respectant les bonnes pratiques.
Ce tutoriel utilise Python 3 et beautifulsoup4, la version actuelle de Beautiful Soup. Créez un environnement virtuel pour isoler votre projet : python -m venv mon_env puis activez-le.
Installez Beautiful Soup via pip : pip install beautifulsoup4. Sur Debian/Ubuntu, utilisez aussi sudo apt-get install python3-bs4.
Beautiful Soup analyse du HTML/XML existant, mais ne récupère pas les URLs. Utilisez la bibliothèque requests : pip install requests.
Pour un parseur performant, installez pip install lxml.
Avant de scraper, inspectez la page avec les outils développeur de votre navigateur (Chrome DevTools : F12). Identifiez les balises HTML, classes et IDs pour cibler précisément les données.
Cela vous aide à élaborer une stratégie éthique : respectez le robots.txt et les conditions d'utilisation du site.
Ouvrez votre éditeur (VS Code, PyCharm) ou Jupyter Notebook. Créez un fichier Python et importez les bibliothèques :
from bs4 import BeautifulSoup
import requestsRécupérez le contenu d'une page :
from bs4 import BeautifulSoup
import requests
website = requests.get('https://example.com')
print(website)Status 200 = succès. Passez le contenu à Beautiful Soup :
from bs4 import BeautifulSoup
import requests
website = requests.get('https://example.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)Pour un affichage formaté : soup.prettify(). Pour le texte pur : soup.text.
Premier <h2> : soup.h2. Tous les <h2> :
from bs4 import BeautifulSoup
import requests
website = requests.get('https://example.com')
soup = BeautifulSoup(website.content, 'html.parser')
h2_tags = soup.find_all('h2')
for tag in h2_tags:
print(tag.text)Pour plusieurs balises : soup.find_all(['a', 'h2', 'title']).
Par ID : soup.find(id='mon_id'). Par classe : soup.find(class_='ma_classe') (soulignement pour éviter le mot-clé Python).
Balise + classe : soup.find_all('div', class_='ma_classe').
Installez Pandas : pip install pandas. Voici une classe exemple pour extraire prix et noms de produits :
import pandas as pd
import requests
from bs4 import BeautifulSoup
class ScrapeIt:
def scrape(self, website=None, tag1=None, id1=None, tag2=None, id2=None):
if website and tag1 and id1 and tag2 and id2:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
info_tag1 = soup.find_all(tag1, id1)
info_tag2 = soup.find_all(tag2, id2)
prices = [price.text for price in info_tag1]
shirts = [shirt.text for shirt in info_tag2]
data = {'Prix': prices, 'Nom_chemise': shirts}
df = pd.DataFrame(data)
print(df)
except:
print('Échec du scraping')
else:
print('Fournissez URL, balises et IDs/classe')Utilisation : scraper = ScrapeIt(); scraper.scrape('https://example.com', 'span', {'class': 'price'}, 'h3', {'class': 'product-name'}).
Importez dans un autre fichier : from scraper_module import ScrapeIt.
Consultez la documentation officielle Beautiful Soup pour plus d'options.
Beautiful Soup offre un contrôle précis sur l'extraction de données, idéal pour analyser prix concurrents ou tendances. Utilisez-la éthiquement et légalement.
[]