find() et find_all() dans BeautifulSoup : Guide 2026

Apprenez à utiliser les méthodes find() et find_all() de BeautifulSoup pour extraire efficacement des données web par classe, ID, texte et attributs dans Python.
13 min de lecture
How To Use BeautifulSoup’s find and find_all blog image

find() et find_all() sont des méthodes essentielles pour le Scraping web avec BeautifulSoup, qui vous aident à extraire des données du HTML. La méthode find() récupère le premier élément correspondant à vos critères, par exemple find("div") pour obtenir le premier div d’une page, et renvoie None si aucune correspondance n’est trouvée. Quant à find_all(), elle trouve tous les éléments correspondants et les renvoie sous forme de liste, ce qui la rend parfaite pour extraire plusieurs éléments tels que toutes les balises div. Avant de vous lancer dans le Scraping web avec BeautifulSoup, assurez-vous d’avoir installé Requests et BeautifulSoup.

Installez les dépendances

pip install requests
pip install beautifulsoup4

find()

Familiarisons-nous avec find(). Dans les exemples ci-dessous, nous utiliserons Quotes To Scrape et Fake Store API pour trouver des éléments sur la page. Ces deux sites ont été conçus pour le scraping. Ils ne changent pas beaucoup, ils sont donc parfaits pour apprendre.

Recherche par classe

Pour trouver un élément à l’aide de sa classe, nous utilisons le mot-clé class_. Vous vous demandez peut-être pourquoi class_ et non class? En Python, class est un mot-clé utilisé pour créer des types de données personnalisés. Le trait de soulignement dans class_ empêche ce mot-clé d’entrer en conflit avec notre code.

L’exemple ci-dessous recherche la première balise div avec la classe: quote.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_quote = soup.find("div", class_="quote")
print(first_quote.text)

Voici notre résultat.

« Le monde tel que nous l'avons créé est le résultat de notre pensée. Il ne peut être changé sans changer notre façon de penser. »
Albert Einstein
(à propos de)


Tags :

changement
réflexions profondes
pensée
monde

Rechercher par ID

Lors du scraping, vous aurez également souvent besoin de rechercher des éléments à l’aide de leur identifiant. Dans l’exemple ci-dessous, nous utilisons l’argument id pour trouver le menu sur la page. Ici, nous trouvons le menu sur la page à l’aide de son identifiant.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

ul = soup.find("ul", id="menu")

print(ul.text)

Voici le menu une fois que nous l’avons extrait et affiché dans le terminal.

Accueil
Docs
GitHub
Offrez-moi un café

Rechercher par texte

Nous pouvons également rechercher des éléments à l’aide de leur texte. Pour ce faire, nous utilisons l’argument string. L’exemple ci-dessous permet de trouver le bouton Connexion sur la page.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_button = soup.find("a", string="Login")
print(login_button.text)

Comme vous pouvez le voir, « Login » s’affiche dans la console.

Connexion

Recherche par attribut

Nous pouvons également utiliser différents attributs pour une recherche plus précise. Cette fois-ci, nous recherchons à nouveau la première citation de la page. Cependant, nous recherchons une balise span avec l’attrib ut itemprop de texte. Cela permet à nouveau de trouver notre première citation, mais sans tous les éléments supplémentaires, tels que l'auteur et les balises.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_clean_quote = soup.find("span", attrs={"itemprop": "text"})

print(first_clean_quote.text)

Voici la version épurée de notre première citation.

« Le monde tel que nous l'avons créé est le résultat de notre pensée. Il ne peut être changé sans changer notre façon de penser. »

Recherche à l’aide de plusieurs critères

Comme vous l’avez peut-être remarqué précédemment, l’argument attr prend un dictionnaire au lieu d’une valeur unique. Cela nous permet de passer plusieurs critères pour un filtrage encore plus efficace. Ici, nous trouvons le premier auteur de la page à l’aide des attributs class et itemprop.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

first_author = soup.find("small", attrs={"class": "author", "itemprop": "author"})
print(first_author.text)

Lorsque vous exécutez ce code, vous devriez obtenir Albert Einstein comme résultat.

Albert Einstein

find_all()

Passons maintenant en revue ces mêmes exemples à l’aide de find_all(). Une fois encore, nous utiliserons Quotes to Scrape et l’API Fake Store. Ces exemples sont presque identiques, à une différence majeure près. find() renvoie un seul élément. find_all() renvoie une liste d’éléments de la page.

Recherche par classe

Pour rechercher des éléments à l’aide de leur classe, nous utilisons l’argument clé class_. Le code ci-dessous utilise find_all() pour extraire chaque citation à l’aide de sa classe CSS.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

quotes = soup.find_all("div", class_="quote")

for quote in quotes:
    print("-------------")
    print(quote.text)

Lorsque nous extrayons et imprimons la première page de citations, cela donne le résultat suivant.

-------------

« Le monde tel que nous l'avons créé est le résultat de notre pensée. Il ne peut être changé sans changer notre façon de penser. »
par Albert Einstein
(à propos de)


Tags :

changement
pensées profondes
pensée
monde


-------------

« Ce sont nos choix, Harry, qui montrent ce que nous sommes vraiment, bien plus que nos capacités. »
par J.K. Rowling
(à propos de)


            Tags :
            
capacités
choix


-------------

« Il n'y a que deux façons de vivre sa vie. L'une est comme si rien n'était un miracle. L'autre est comme si tout était un miracle. »
par Albert Einstein
(à propos de)


Tags :

inspirant
vie
vivre
miracle
miracles


-------------

« La personne, qu'il s'agisse d'un gentleman ou d'une dame, qui ne prend pas plaisir à lire un bon roman, doit être d'une stupidité intolérable. »
par Jane Austen
(à propos de)


            Tags :

analphabétisme
livres
classique
humour


-------------

« L'imperfection est beauté, la folie est génie, et il vaut mieux être absolument ridicule qu'absolument ennuyeux. »
par Marilyn Monroe
(à propos de)


            Tags :

être soi-même
inspirant


-------------

« Ne cherchez pas à devenir un homme qui réussit. Cherchez plutôt à devenir un homme de valeur. »
par Albert Einstein
(à propos de)


Tags :

âge adulte
succès
valeur


-------------

« Mieux vaut être détesté pour ce que l'on est que d'être aimé pour ce que l'on n'est pas. »
par André Gide
(à propos de)


            Tags :
            
vie
amour


-------------

« Je n'ai pas échoué. J'ai simplement trouvé 10 000 façons qui ne fonctionnent pas. »
par Thomas A. Edison
(à propos de)


            Tags :

edison
échec
inspirant
paraphrasé


-------------

« Une femme est comme un sachet de thé : on ne sait jamais à quel point elle est forte tant qu'elle n'est pas plongée dans l'eau bouillante. »
par Eleanor Roosevelt
(à propos de)


            Tags :

attribution erronée-eleanor-roosevelt


-------------

« Une journée sans soleil, c'est comme, vous savez, la nuit. »
par Steve Martin
(à propos de)


Tags :

humour
évidence
comparaison

Rechercher par ID

Comme nous l’avons vu lors de l’utilisation de find(), id est une autre méthode couramment utilisée pour extraire des données d’une page. Pour extraire des données à l’aide de leur id, nous utilisons l’argument id… comme nous l’avons fait précédemment.

Nous trouvons ensuite tous les éléments ul avec un id de menu. Il n’y a qu’un seul menu, donc nous n’en trouverons qu’un seul.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://fakestoreapi.com")

soup = BeautifulSoup(response.text, "html.parser")

uls = soup.find_all("ul", id="menu")

for ul in uls:
    print("-------------")
    print(ul.text)

Comme il n’y a qu’un seul menu sur la page, notre résultat est exactement le même que lorsque nous utilisons find().

-------------

Accueil
Docs
GitHub
Offrez-moi un café

Rechercher par texte

Nous allons maintenant extraire des éléments d’une page à l’aide de leur texte. Nous utiliserons l’argument string. Dans l’exemple ci-dessous, nous trouvons tous les éléments contenant la chaîne: Login. Une fois encore, il n’y en a qu’un seul.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

login_buttons = soup.find_all("a", string="Login")

for button in login_buttons:
    print("-------------")
    print(button)

Votre résultat devrait ressembler à ceci.

-------------
<a href="/login">Connexion</a>

Recherche par attribut

Lorsque vous passez au scraping dans la nature, vous aurez souvent besoin d’utiliser d’autres attributs pour extraire des éléments de la page. Vous vous souvenez du résultat désordonné du premier exemple ? Dans le prochain extrait, nous utiliserons l’attribut itemprop et n’extrairons que les citations cette fois-ci.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

clean_quotes = soup.find_all("span", attrs={"itemprop": "text"})

for quote in clean_quotes:
    print("-------------")
    print(quote.text)

Regardez comme notre résultat est propre !

-------------
« Le monde tel que nous l'avons créé est le résultat de notre pensée. Il ne peut être changé sans changer notre façon de penser. »
-------------
« Ce sont nos choix, Harry, qui révèlent qui nous sommes vraiment, bien plus que nos capacités. »
-------------
« Il n'y a que deux façons de vivre sa vie. L'une est de considérer que rien n'est un miracle. L'autre est de considérer que tout est un miracle. »
-------------
« La personne, qu'elle soit un homme ou une femme, qui ne prend pas plaisir à lire un bon roman, doit être d'une stupidité intolérable. »
-------------
« L'imperfection est beauté, la folie est génie, et il vaut mieux être absolument ridicule qu'absolument ennuyeux. »
-------------
« N'essayez pas de devenir un homme qui réussit. Devenez plutôt un homme de valeur. »
-------------
« Il vaut mieux être détesté pour ce que vous êtes que d'être aimé pour ce que vous n'êtes pas. »
-------------
« Je n'ai pas échoué. J'ai simplement trouvé 10 000 façons qui ne fonctionnent pas. »
-------------
« Une femme est comme un sachet de thé : on ne sait jamais à quel point elle est forte tant qu'elle n'est pas plongée dans l'eau chaude. »
-------------
« Une journée sans soleil, c'est comme la nuit. »

Recherche à l’aide de plusieurs critères

Cette fois-ci, nous allons utiliser l’argument attrs de manière plus complexe. Ici, nous recherchons tous les petits éléments qui ont une classe author et un itemprop author. Pour ce faire, nous passons les deux attributs dans notre dictionnaire attrs.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.find_all("small", attrs={"class": "author", "itemprop": "author"})

for author in authors:
    print("-------------")
    print(author.text)

Voici notre liste d’auteurs dans la console.

-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

Techniques avancées

Voici quelques techniques plus avancées. Dans les exemples ci-dessous, nous utilisons find_all(), mais ces méthodes sont également compatibles avec find(). N’oubliez pas : voulez-vous un seul élément ou une liste d’éléments ?

Regex

Regex est un outil très puissant pour la correspondance de chaînes. Dans cet exemple de code, nous le combinons avec la chaîne article pour trouver tous les éléments contenant einstein, quelle que soit leur casse.

import requests
import re
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

pattern = re.compile(r"einstein", re.IGNORECASE)

tags = soup.find_all(string=pattern)

print(f"Nombre total de citations d'Einstein : {len(tags)}")

Il y a 3 citations trouvées sur la page.

Nombre total de citations d'Einstein : 3

Fonctions personnalisées

Maintenant, écrivons une fonction personnalisée pour renvoyer toutes les citations réelles d’Einstein. Dans l’exemple ci-dessous, nous développons l’expression régulière. Nous utilisons la méthode parent pour parcourir et trouver la carte contenant la citation. Ensuite, nous trouvons toutes les balises span. La première balise span de la carte contient la citation réelle. Nous affichons son contenu dans la console.

import requests
import re
from bs4 import BeautifulSoup

def find_einstein_quotes(http_response):
    soup = BeautifulSoup(http_response.text, "html.parser")

    #find all einstein tags
    pattern = re.compile(r"einstein", re.IGNORECASE)
    tags = soup.find_all(string=pattern)

    for tag in tags:
        #suivre les parents jusqu'à obtenir la carte de citation
        full_card = tag.parent.parent.parent

        #trouver les spans
        spans = full_card.find_all("span")

        #imprimer le premier span, il contient la citation proprement dite
        print(spans[0].text)


if __name__ == "__main__":
    response = requests.get("https://quotes.toscrape.com")
    find_einstein_quotes(response)

Voici notre résultat.

« Le monde tel que nous l'avons créé est le résultat de notre pensée. Il ne peut être changé sans changer notre façon de penser. »
« Il n'y a que deux façons de vivre sa vie. L'une est de considérer que rien n'est un miracle. L'autre est de considérer que tout est un miracle. »
« Ne cherchez pas à devenir un homme qui réussit. Cherchez plutôt à devenir un homme de valeur. »

Bonus : recherche à l’aide de sélecteurs CSS

La méthode select de BeautifulSoup fonctionne presque exactement comme find_all(), mais elle est un peu plus flexible. Cette méthode utilise un sélecteur CSS. Si vous pouvez écrire un sélecteur, vous pouvez le trouver. Dans ce code, nous trouvons à nouveau tous nos auteurs en utilisant plusieurs attributs. Cependant, nous pouvons les passer sous la forme d’un seul sélecteur.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://quotes.toscrape.com")

soup = BeautifulSoup(response.text, "html.parser")

authors = soup.select("small[class='author'][itemprop='author']")

for author in authors:
    print("-------------")
    print(author.text)

Voici notre résultat.

-------------
Albert Einstein
-------------
J.K. Rowling
-------------
Albert Einstein
-------------
Jane Austen
-------------
Marilyn Monroe
-------------
Albert Einstein
-------------
André Gide
-------------
Thomas A. Edison
-------------
Eleanor Roosevelt
-------------
Steve Martin

Conclusion

Vous connaissez désormais tous les aspects desméthodes find()etfind_all()de BeautifulSoup. Vous n’avez pas besoin de maîtriser toutes ces méthodes. La grande variété de méthodes de recherche vous permet de choisir celle qui vous convient le mieux. Plus important encore, vous pouvez les utiliser pour extraire des données de n’importe quelle page web. En production, en particulier pour obtenir des résultats rapides et fiables avec un taux de réussite élevé, vous pouvez envisager d’utiliser nosProxys résidentielsou mêmenotre Navigateur de scrapingqui dispose d’un système de gestion de Proxy intégré et de capacités de Résolution de CAPTCHA.

Inscrivez-vous et commencez votre essai gratuit dès aujourd’hui pour trouver le produit qui répond parfaitement à vos besoins.