CodeGym /Cours Java /Python SELF FR /Collecte de données à partir des tableaux et des listes

Collecte de données à partir des tableaux et des listes

Python SELF FR
Niveau 32 , Leçon 2
Disponible

1. Extraction de données tabulaires

Que partagent les tableaux et les oignons ? Oui, les couches !

Les tableaux en HTML sont une sorte d'équivalent de gâteau à couches, composé des éléments <table>, <tr> (lignes), <th> (cellules d'entête) et <td> (cellules normales). Chacun de ces éléments a son rôle dans la présentation des données, et pour en extraire les informations, nous devons traverser chaque couche une par une.

Pratique, pratique et encore de la pratique !

Commençons avec ce simple tableau HTML :

HTML
<table>
  <tr>
    <th>Nom</th>
    <th>Âge</th>
    <th>Ville</th>
  </tr>
  <tr>
    <td>Alice</td>
    <td>29</td>
    <td>Moscou</td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>34</td>
    <td>Saint-Pétersbourg</td>
  </tr>
</table>

Étape 1 : Trouver le tableau sur la page

Les tableaux sur les pages web sont définis par les balises HTML <table>, et les données à l'intérieur des tableaux sont disposées dans les balises <tr> (lignes du tableau) et <td> (cellules de données). Avec BeautifulSoup, la méthode find peut chercher le premier tableau sur la page, tandis que find_all récupère tous les tableaux si plusieurs existent.

Python
# Recherche du premier tableau sur la page
table = soup.find("table")

Si vous avez besoin d'extraire un tableau spécifique, vous pouvez affiner la recherche en précisant ses attributs, par exemple id ou class.

Python

# Recherche du tableau par classe
table = soup.find("table", {"class": "table-class"})

Étape 2 : Extraire les données du tableau

Une fois chargé, vous pouvez commencer à extraire les données. Les données dans le tableau sont disposées ligne par ligne, donc un choix logique serait de parcourir les lignes du tableau et d'extraire les données de chaque cellule.

Extraction des entêtes

Les entêtes des tableaux sont habituellement dans la première ligne et encapsulés dans des balises <th>. Avec find_all, on peut regrouper tous les entêtes dans une liste.

Python
# Extraction des entêtes de la première ligne du tableau
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())

print("Entêtes du tableau:", headers)

Extraction des lignes de données

Pour extraire toutes les lignes de données (généralement encapsulées dans des balises <tr>, et chaque cellule dans des balises <td>), utilisez une boucle imbriquée : d'abord trouvez toutes les lignes <tr>, puis parcourez les cellules <td> dans chaque ligne.

Python

# Extraction de toutes les lignes de données
data = []
rows = table.find_all("tr")[1:]  # Sauter la première ligne avec les entêtes

for row in rows:
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.text.strip())
data.append(row_data)

print("Données du tableau:", data)

Ce code parcourt proprement les lignes du tableau et extrait le texte de chaque cellule. Magique, n'est-ce pas ? Evidemment, tout miracle nécessite un peu de magie de boucle !

2. Travailler avec les listes

Les listes — les grands frères des tableaux

Dans la vie, il n'y a que deux objets infinis : les tableaux et les listes. Les listes sont représentées par les balises <ul> (non ordonnées) et <ol> (ordonnées), et leurs éléments sont des balises <li>. Contrairement aux tableaux, les listes sont simples et minimalistes, ce qui en fait des candidats idéaux pour un traitement de données rapide et efficace !

Extraction de données des listes

Voyons un exemple de liste HTML :

HTML

<ul>
  <li>Pomme</li>
  <li>Banane</li>
  <li>Raisin</li>
</ul>

Maintenant, utilisons notre bon vieux BeautifulSoup pour extraire ces données :

Python

html = """
<ul>
  <li>Pomme</li>
  <li>Banane</li>
  <li>Raisin</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

ul = soup.find('ul')
items = ul.find_all('li')

for item in items:
    print(item.get_text())

Voilà ! Une approche simple mais efficace que vous pouvez appliquer à des structures plus complexes.

3. Exemple d'extraction et de traitement des données tabulaires

Pour consolider les connaissances, essayons d'extraire des données d'un exemple similaire en pratique, mais avec une structure plus complexe :

HTML

<table id="courses">
  <tr>
    <th>Cours</th>
    <th>Instructeur</th>
  </tr>
  <tr>
    <td>Python pour tous</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatisation avec Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>

Pour extraire les données du tableau et de la liste, vous pouvez configurer les requêtes comme suit :

Python

html = """
<table id="courses">
  <tr>
    <th>Cours</th>
    <th>Instructeur</th>
  </tr>
  <tr>
    <td>Python pour tous</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatisation avec Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

# Extraction des données du tableau
course_table = soup.find('table', id='courses')
course_rows = course_table.find_all('tr')

for row in course_rows:
    cells = row.find_all(['th', 'td'])
    for cell in cells:
        print(cell.get_text())

print("---")

# Extraction des données de la liste
tech_list = soup.find('ul', class_='technologies')
tech_items = tech_list.find_all('li')

for item in tech_items:
    print(item.get_text())

Ce script couvre les deux types de données. Remarquez comment nous utilisons les identifiants et les classes pour rechercher précisément les éléments. En pratique, vous pourriez rencontrer des structures HTML plus complexes, mais l'approche reste la même : commencez par le niveau supérieur, décomposez les éléments, et enfin, extrayez les précieuses données !

4. Résumé partiel et erreurs courantes

Travailler avec les tableaux et les listes sur les pages web, c'est comme naviguer dans un labyrinthe. Parfois, nous pouvons tomber sur des données imparfaites, comme des cellules vides ou des éléments manquants. Dans ces cas, il est important de vérifier si les données sont correctes et complètes. Les erreurs communes incluent l'accès à des éléments inexistants ou l'utilisation incorrecte des sélecteurs. Rappelez-vous que le HTML peut ne pas toujours être aussi propre et structuré que vous le souhaitez, alors tenez toujours compte de la gestion des exceptions et de la validation des données.

Où cela peut-il être utile ?

Les connaissances acquises dans cette conférence vous permettront d'extraire et de traiter automatiquement les données de nombreuses sources en ligne. Par exemple, vous pouvez automatiser la collecte de données à partir des tableaux des marchés boursiers, configurer la surveillance des prix dans les magasins en ligne et même effectuer une analyse régulière des données provenant des blogs et des sites d'actualités. Maîtriser la technique d'extraction des données à partir des tableaux et des listes vous ouvre un monde de possibilités pour l'automatisation et l'analyse des données.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION