Comment extraire des tableaux de sites web - un tutoriel Python

Comment faire, Python, Scraping, 13 décembre 20245 minutes de lecture

Le web scraping est devenu une compétence essentielle pour les développeurs Python, les analystes de données et tous ceux qui travaillent avec des ensembles de données. Lorsqu'il s'agit de données structurées et riches, les tableaux que l'on trouve sur les sites web sont souvent des mines d'or d'informations. Que vous cherchiez sur le web des catalogues de produits, des statistiques sportives ou des données financières, la possibilité d'extraire et d'enregistrer des données de tableaux à l'aide de Python est un outil inestimable.

Ce guide pratique vous accompagne pas à pas dans le processus de récupération de tableaux à partir de sites web en utilisant Python. À la fin, vous saurez comment utiliser des bibliothèques populaires comme requests, Beautiful Soup et même pandas pour accéder aux données des tableaux et les stocker dans des formats réutilisables comme les fichiers CSV.

Conditions préalables

Avant d'entrer dans les détails techniques, voici ce dont vous aurez besoin pour suivre la procédure :

  • Assurez-vous que Python est installé sur votre système. Vous pouvez télécharger la dernière version ici.
  • Bibliothèques requises :
    • requêtes - Pourrécupérer le contenu HTML des sites web. Il s'agit d'un paquetage populaire pour l'envoi de requêtes HTTP en Python.
    • Beautiful Soup - Unebibliothèque puissante pour analyser les documents HTML et XML. Nous l'utiliserons pour extraire des éléments spécifiques de notre page web.
    • pandas - Labibliothèque de référence pour la manipulation et l'analyse des données en Python. Il s'agit de la destination finale où nous stockons les données extraites du tableau.

Nous allons utiliser la commande pip pour installer les bibliothèques nécessaires. Exécutez simplement la commande suivante dans votre terminal pour terminer l'installation :

pip install requests beautifulsoup4 pandas

Guide étape par étape pour le grattage des tableaux

Étape 1 : Comprendre la structure du site web

La première étape de tout projet de web scraping consiste à analyser la structure du site web cible. Dans cet exemple, nous allons récupérer les données d'un exemple de site web qui présente un tableau affichant les classements des équipes de hockey. Vous trouverez ci-dessous un aperçu du tableau :

Voici comment ce tableau apparaît dans la structure HTML.

Étape 2 : Envoi d'une requête HTTP

La première étape consiste à récupérer la page web que vous voulez scraper. Nous allons utiliser la bibliothèque requests pour envoyer une requête HTTP et récupérer le contenu HTML du site web fictif que nous utilisons pour obtenir le contenu du tableau.

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
   print("Page fetched successfully!")
   html_content = response.text
else:
   print(f"Failed to fetch the page. Status code: {response.status_code}")
   exit()

Étape 3 : Extraction des données du tableau

En HTML, un tableau est une manière structurée de présenter des données en lignes et en colonnes, comme dans une feuille de calcul. Les tableaux sont créés à l'aide de la fonction <table> et leur contenu est divisé en lignes (<tr>) et les cellules (<td> pour les cellules de données ou <th> pour les cellules d'en-tête). Voici une brève description de la structure d'un tableau :

  • Tableau : Enfermé dans <table> il sert de conteneur à toutes les lignes et cellules.
  • Rangs : Chaque <tr> (ligne du tableau) représente une tranche horizontale du tableau.
  • Cellules : A l'intérieur de chaque ligne, <td> contiennent des valeurs de données individuelles (ou <th> pour les en-têtes).
  • Attributs : Les tableaux ont souvent des classes, des identifiants ou d'autres attributs pour les styliser ou les identifier.

Par exemple, dans ce script, nous localisons le fichier <table> avec une classe spécifique (class="table") et extraire ses lignes et ses cellules à l'aide de Une belle soupe. Cela nous permet d'extraire les données de manière systématique et de les préparer pour l'analyse ou la sauvegarde.

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
   print("No table found on the page!")
   exit()

Étape 4 : Enregistrement des données dans un fichier CSV

Dans cette étape, nous enregistrerons les données extraites du tableau dans un fichier CSV pour une utilisation ultérieure et nous les afficherons également sous la forme d'un DataFrame pandas afin que vous puissiez voir comment les données sont structurées. L'enregistrement des données au format CSV vous permet de les analyser ultérieurement dans des outils tels qu'Excel, Google Sheets ou Python lui-même.

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
   cells = [cell.text.strip() for cell in row.find_all("td")]
   rows.append(cells)

df = pd.DataFrame(rows, columns=headers)

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(f"Data saved to {csv_filename}")

Lorsque vous exécutez ce code, pandas crée un fichier nommé données_de_table_raclées.csv dans votre répertoire de travail, et les données extraites seront imprimées dans la console comme suit :

          Nom de l'équipe Année Victoires Défaites OT Défaites Victoire % Buts pour (GF) Buts contre (GA) + / -
0 Boston Bruins 1990 44 24 0.55 299 264 35
1 Buffalo Sabres 1990 31 30 0.388 292 278 14
2 Calgary Flames 1990 46 26 0.575 344 263 81
3 Chicago Blackhawks 1990 49 23 0.613 284 211 73
4 Red Wings de Detroit 1990 34 38 0.425 273 298 -25

Code complet : Récupérer et enregistrer les données d'un tableau

Vous trouverez ci-dessous le script Python complet permettant de récupérer les données d'un tableau sur un site web, de les enregistrer dans un fichier CSV et d'afficher les données extraites. Ce script combine toutes les étapes couvertes dans ce guide en un seul flux de travail cohérent.

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
    print("Page fetched successfully!")
    html_content = response.text
else:
    print(f"Failed to fetch the page. Status code: {response.status_code}")
    exit()

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
    print("No table found on the page!")
    exit()

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
    cells = [cell.text.strip() for cell in row.find_all("td")]
    rows.append(cells)

df = pd.DataFrame(rows, columns=headers)

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(df.head())
print(f"Data saved to {csv_filename}")

Conclusion

Ce guide vous a guidé pas à pas à travers le processus : comprendre la structure du site web, extraire les données et les sauvegarder pour l'analyse. Que vous construisiez des ensembles de données pour la recherche, que vous automatisiez la collecte de données ou que vous exploriez simplement les possibilités du web scraping, la maîtrise de ces techniques vous ouvre un monde d'opportunités.

Lors du scraping, vous pouvez rencontrer des difficultés telles que des interdictions d'IP ou des limites de débit imposées par les sites web. C'est là que proxys devient crucial. proxys vous permet de :

  • Contourner les limites de débit : Rotation des adresses IP pour éviter d'être bloqué par les sites web qui envoient trop de requêtes.
  • Préserver l'anonymat : Gardez votre identité cachée en masquant votre véritable adresse IP.
  • Accéder à des données géo-restreintes : Utilisez proxys avec des lieux spécifiques pour récupérer du contenu propre à une région.

ProxyScrape propose une large gamme de proxys, y compris des proxys résidentiels, premium, dédiés et mobiles, conçus pour le web scraping. Leurs solutions proxy fiables et évolutives peuvent vous aider à gérer des projets de scraping à grande échelle sans interruption, garantissant ainsi une collecte de données efficace et sans heurts.