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 :
<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.
# 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
.
# 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.
# 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.
# 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 :
<ul>
<li>Pomme</li>
<li>Banane</li>
<li>Raisin</li>
</ul>
Maintenant, utilisons notre bon vieux BeautifulSoup
pour
extraire ces données :
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 :
<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 :
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.
GO TO FULL VERSION