Récupération de données sur le Web avec BeautifulSoup

Un guide pratique sur l’extraction de données à partir de sites web

Apprendre à extraire des données de sites web en utilisant BeautifulSoup en Python. Ce didacticiel couvre les techniques pratiques du web scraping, notamment l’analyse HTML, l’extraction de données, la manipulation de tableaux, la pagination et l’utilisation de sessions, pour une collecte de données robuste.

Programmation
Auteur·rice
Affiliation
Date de publication

8 février 2024

Modifié

9 mai 2025

Mots clés

Tutoriel BeautifulSoup, Python web scraping, web scraping Python, Extraction de données avec BeautifulSoup

Introduction

Le web scraping est une technique puissante qui permet d’extraire des données de sites web à des fins d’analyse, de recherche ou d’autres projets axés sur les données. Dans ce tutoriel, vous apprendrez à utiliser BeautifulSoup, une bibliothèque Python populaire, pour analyser le code HTML et extraire des informations utiles des pages web. Nous aborderons non seulement des exemples de base comme l’extraction des titres de pages et des liens, mais aussi des techniques avancées comme l’extraction de tableaux, la gestion de la pagination et l’utilisation de sessions pour maintenir l’état à travers de multiples requêtes.



Importation des paquets requis

Pour garder notre code organisé et éviter les répétitions, nous commençons par importer les paquets nécessaires. Cela permet de s’assurer que tous les morceaux de code suivants ont accès aux bibliothèques nécessaires.

#| label: import-packages
# Ce code importe les paquets essentiels pour le web scraping.
import requests
from bs4 import BeautifulSoup

Exemple de base pour l’extraction de données sur le web

Tout d’abord, montrons comment récupérer une page web, analyser son code HTML et extraire le titre de la page.

#| label: basic-scraping
# Définir l'URL à récupérer
url = "https://www.worldometers.info/world-population/population-by-country/"

# Récupérer la page web
response = requests.get(url)
# Analyser le contenu HTML
soup = BeautifulSoup(response.text, "html.parser")

# Extraire et imprimer le titre de la page
page_title = soup.title.string
print("Page Title:", page_title)

Résultats:

Page Title: Population by Country (2025) - Worldometer

Extraction de tableaux

De nombreux sites web présentent des données dans des tableaux. Vous pouvez utiliser BeautifulSoup pour extraire les données d’un tableau et les convertir dans un format structuré.

#| label: extract-tables
# Trouver une table par sa balise (ou avec des attributs supplémentaires, par exemple, class ou id)
table = soup.find("table")
# Extraire les en-têtes de tableaux
headers = [header.text.strip() for header in table.find_all("th")]

# Extraire les lignes d'un tableau
rows = []
for row in table.find_all("tr")[1:]:
    cells = [cell.text.strip() for cell in row.find_all("td")]
    if cells:
        rows.append(cells)

# Créez un `DataFrame` en utilisant les en-têtes et les lignes extraites
df = pd.DataFrame(rows, columns=headers)
df.head()

Tableau extrait

Gérer la pagination

Pour les sites web qui affichent des données sur plusieurs pages, vous pouvez automatiser le processus d’itération à travers les pages.

Le script suivant analyse les articles du blog en extrayant le titre de chaque article (à partir du texte de l’ancre) et l’URL (à partir de l’attribut href de l’ancre):

#| label: pagination-example
import time

def scrape_page(url):
    response = requests.get(url)
    return BeautifulSoup(response.text, "html.parser")

# Le site web utilise un paramètre de requête `#listing-listing-page=` pour la pagination
base_url = "https://quarto.org/docs/blog/#listing-listing-page="
page_number = 1
all_data = []

# Exemple : extraire les 2 premières pages
while page_number <= 2:
    url = base_url + str(page_number)
    soup = scrape_page(url)    
    # Extraire des articles de blog: 
    # Chaque titre et URL se trouve dans un `<h3 class='no-anchor listing-title'>` 
    posts = []
    for h3 in soup.find_all("h3", class_="no-anchor listing-title"):
        a_tag = h3.find("a")
        if a_tag:
            title = a_tag.text.strip()
            link = a_tag.get("href")
            posts.append({"title": title, "url": link})
    
    all_data.extend(posts)
    page_number += 1
    # Délai respectueux entre les requêtes
    time.sleep(1)  

# Convertir la sortie en DataFrame et imprimer les données
df = pd.DataFrame(all_data)
df.head()

Extraction des articles de blog

Comment cela fonctionne-t-il

  • Pagination: Le script construit l’URL de chaque page à l’aide d’un paramètre de requête (par exemple, #listing-listing-page=1, #listing-listing-page=2).
  • **Pour chaque page, la fonction scrape_page télécharge et analyse le code HTML.
  • Extraction des messages : Il recherche les balises <h3> avec la classe 'no-anchor listing-title', trouve la balise enfant <a>, et extrait le titre (en utilisant .text) et l’URL (en utilisant .get('href')).
  • Collecte des données: Les données de chaque message sont stockées sous forme de dictionnaire dans la liste 3a96e4166fbfcac4172e175a82af32.

Utilisation des sessions

Lors de l’extraction de plusieurs pages d’un même site Web, l’utilisation d’une session peut améliorer les performances en réutilisant les paramètres (tels que les en-têtes et les cookies) et en conservant l’état.

#| label: using-sessions
# Créer un objet session
session = requests.Session()
session.headers.update({"User-Agent": "Mozilla/5.0"})

# Utiliser la session pour faire des requêtes
url = "https://www.worldometers.info/world-population/population-by-country/"
response = session.get(url)
soup = BeautifulSoup(response.text, "html.parser")
print("Session-based Page Title:", soup.title.string)

Bonnes pratiques pour le Récupération de données sur le Web

  • Respecter les politiques du site web:
    Vérifiez toujours les robots.txt et les conditions d’utilisation d’un site avant de procéder au scraping.

  • Limitation du débit:
    Utilisez des délais (par exemple, time.sleep()) entre les requêtes pour éviter de submerger le site web.

  • Gestion des erreurs:
    Incorporer une gestion robuste des erreurs pour gérer les problèmes de connexion et les structures HTML inattendues.

Note

Veillez à ce que vos activités de ‘web scraping’ soient conformes aux lignes directrices légales et éthiques.

Conclusion

Le web scraping avec BeautifulSoup est un moyen efficace d’extraire et de traiter les données des sites web. En combinant les techniques de base avec des stratégies avancées telles que l’extraction de tableaux, la gestion de la pagination et la gestion des sessions, vous pouvez construire des pipelines de collecte de données robustes pour vos projets de science des données. Expérimentez ces exemples, adaptez-les à vos besoins spécifiques et pratiquez toujours un scraping éthique.

Plus d’informations

Bon codage, et bonne exploration de la puissance du web scraping avec BeautifulSoup!

Explorer d’autres articles

Note

Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.

placeholder

placeholder
Aucun article correspondant
Retour au sommet

Réutilisation

Citation

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Récupération de données sur le Web avec BeautifulSoup},
  date = {2024-02-08},
  url = {https://www.datanovia.com/fr/learn/programming/python/tools/web-scraping-with-beautifulsoup.html},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2024. “Récupération de données sur le Web avec BeautifulSoup.” February 8, 2024. https://www.datanovia.com/fr/learn/programming/python/tools/web-scraping-with-beautifulsoup.html.