1. Pourquoi utiliser find
et find_all
?
Aujourd'hui, on va parler de deux méthodes principales qui nous permettent d'extraire efficacement et de façon ciblée des éléments des documents HTML : find
et find_all
.
Avant de plonger dans le code, discutons pourquoi ces méthodes sont nécessaires. Imagine une page web comme une immense bibliothèque où chaque mot et chaque phrase sont des éléments HTML. Trouver l'info qu'il te faut, c'est un peu comme essayer de deviner le goût d'une glace sans en connaître la couleur. Les méthodes find
et find_all
sont tes "détecteurs de goûts", qui t'aident à trouver précisément l'info nécessaire.
find
: Cette méthode, c'est comme la première tasse de café d'un dev le matin — elle trouve rapidement et renvoie le premier élément qui correspond aux critères donnés.find_all
: Approche plus patiente et méthodique, elle renvoie une liste de tous les éléments qui correspondent aux critères de recherche. Parfait pour les moments où tu as besoin de plus d'infos (comme plusieurs tasses de café dans la journée).
2. Utilisation de find
Alors, la méthode find
est utilisée quand tu veux rapidement extraire le premier élément correspondant. Elle accepte différents paramètres comme le nom du tag, les attributs, et même des fonctions.
Signature de la méthode find
find(name=None, attrs={}, recursive=True, string=None, **kwargs)
Paramètres de la méthode find
- name : Le nom du tag que tu veux trouver. Cela peut être n'importe quel tag HTML, comme
div
,p
,h1
,a
, etc. - attrs : Un dictionnaire contenant les attributs du tag. Par exemple,
{'class': 'example'}
ou{'id': 'main'}
. Ce paramètre permet de restreindre la recherche. - recursive : Un paramètre booléen qui définit si la méthode doit rechercher le tag à tous les niveaux. Par défaut, il est sur
True
, ce qui signifie que la recherche sera faite à tous les niveaux. - string : Recherche des éléments avec un texte spécifique. Utile pour filtrer les éléments selon leur contenu textuel.
- kwargs : Arguments supplémentaires pour la recherche par attributs. Si des arguments comme
class_
sont fournis, ils seront interprétés commeattrs={'class': 'value'}
.
Exemple
from bs4 import BeautifulSoup
html_doc = """
<html>
<head><title>L'histoire du Loir</title></head>
<body>
<p class="title"><b>L'histoire du Loir</b></p>
<p class="story">Il était une fois trois petites sœurs; et leurs noms étaient
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> et
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
et elles vivaient au fond d'un puits.</p>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
first_link = soup.find('a') # Trouve le premier tag <a>
print(first_link) # Affiche : <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
Comme tu peux le voir, la méthode find
a trouvé le premier tag <a>
dans le document, et on peut tranquillement continuer nos recherches sachant que l'info dont on avait besoin a été trouvée.
3. Utilisation de find_all
La méthode find_all
renvoie une liste de tous les éléments qui correspondent aux critères donnés. C'est particulièrement utile si tu veux récupérer tous les tags d'un type donné ou tous les éléments d'une classe spécifique.
Signature de la méthode find_all
find_all(name=None, attrs={}, recursive=True, string=None, limit=None, **kwargs)
Paramètres de la méthode find_all
- name : Le nom du tag que tu veux trouver. Cela peut être une chaîne contenant le nom du tag (
div
,a
,p
, etc.) ou une liste de tags, par exemple,["div", "p"]
. - attrs : Un dictionnaire d'attributs pour filtrer les tags, par exemple,
{'class': 'example'}
. - recursive : Définit si la recherche doit être effectuée de manière récursive, en incluant les tags imbriqués. Par défaut,
True
. - string : Recherche des tags contenant un texte spécifique.
- limit : Définit le nombre maximum de résultats retournés. Si spécifié, la méthode renverra au plus
limit
éléments. - kwargs : Paramètres supplémentaires pour filtrer les attributs du tag.
Exemple d'utilisation de find_all
Si find
est comme une recherche rapide du bon livre sur une étagère, alors find_all
est une approche plus détaillée, comme lire chaque titre de chapitre pour comprendre.
all_links = soup.find_all('a') # Trouve tous les tags <a>
for link in all_links:
print(link.get('href')) # Affiche les liens : http://example.com/elsie, http://example.com/lacie, http://example.com/tillie
Dans cet exemple, on trouve tous les tags <a>
puis on extrait les liens de chacun. C'est utile si tu veux collecter tous les liens d'une page.
Important ! Les méthodes find()
et find_all()
peuvent être appelées non seulement sur l'objet soup, mais aussi sur tout élément enfant, qui a été retourné par les fonctions find()
, select()
, etc.
GO TO FULL VERSION