Analyser du HTML avec BeautifulSoup
find(), select(), sélecteurs CSS et extraction de contenu structuré depuis du HTML.
Analyser du HTML avec BeautifulSoup est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi analyser le HTML avec des agents ?
De nombreuses sources de données ne sont pas des API : ce sont des pages Web. Lorsqu’un agent doit extraire des informations structurées à partir de HTML, il doit analyser le balisage brut pour le transformer en arbre navigable.
BeautifulSoup (bs4) est la bibliothèque Python standard pour cela. Elle transforme un HTML désordonné en un objet Python que vous pouvez interroger facilement.
Créer un objet BeautifulSoup
Transmettez du HTML brut et le nom d’un analyseur à BeautifulSoup(). 'html.parser' est intégré à Python et ne nécessite aucune installation supplémentaire. Pour analyser plus rapidement les pages volumineuses, 'lxml' est disponible via pip.
from bs4 import BeautifulSoup
import httpx
# Fetch HTML
response = httpx.get('https://example.com', timeout=10.0)
html = response.text
# Parse it
soup = BeautifulSoup(html, 'html.parser')
# Get the page title
print(soup.title.text) # 'Example Domain'find() — Trouver un seul élément
soup.find(tag, attrs) renvoie le premier élément correspondant, ou None si aucun élément n’est trouvé. Vous pouvez effectuer la recherche par nom de balise, classe, identifiant ou tout autre attribute.
Vérifiez toujours que le résultat n’est pas None avant d’appeler des méthodes dessus.
from bs4 import BeautifulSoup
html = '<div class="content"><h1>Title</h1><p>Body text here.</p></div>'
soup = BeautifulSoup(html, 'html.parser')
# Find by tag + class
content_div = soup.find('div', class_='content')
if content_div:
heading = content_div.find('h1')
print(heading.text) # 'Title'
# Find by id
sidebar = soup.find('div', id='sidebar') # None if absentfind_all() — Trouver plusieurs éléments
soup.find_all(tag) renvoie une liste de tous les éléments correspondants. Parcourez-la pour extraire des données de structures répétées, comme des éléments de liste, des lignes de tableau ou des cartes d’articles.
from bs4 import BeautifulSoup
html = '<ul><li>Apple</li><li>Banana</li><li>Cherry</li></ul>'
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('li')
for item in items:
print(item.text) # Apple, Banana, Cherry
# Limit results
first_two = soup.find_all('li', limit=2)Sélecteurs CSS avec select()
soup.select('css selector') vous permet d’utiliser la syntaxe CSS familière. Cette approche est souvent plus concise que des appels find() enchaînés, notamment pour les éléments imbriqués.
from bs4 import BeautifulSoup
html = '''
<table>
<tr><td class="name">Alice</td><td class="score">95</td></tr>
<tr><td class="name">Bob</td><td class="score">87</td></tr>
</table>
'''
soup = BeautifulSoup(html, 'html.parser')
# Select all td elements inside tr inside table
cells = soup.select('table tr td')
for cell in cells:
print(cell.text)
# Select only name cells
names = soup.select('td.name')
for n in names:
print(n.text) # Alice, BobExtraire du texte avec .text et .strip()
.text (ou .get_text()) renvoie tout le contenu textuel d’un élément, y compris celui des balises imbriquées. Utilisez .strip() pour supprimer les espaces superflus au début et à la fin, que le HTML contient souvent.
from bs4 import BeautifulSoup
html = '<p> \n Price: <strong>$29.99</strong> \n </p>'
soup = BeautifulSoup(html, 'html.parser')
paragraph = soup.find('p')
# .text includes nested tag content
print(paragraph.text) # ' \n Price: $29.99 \n '
print(paragraph.text.strip()) # 'Price: $29.99'
# get_text with separator
print(paragraph.get_text(separator=' ', strip=True)) # 'Price: $29.99'Extraire des attributs avec .get()
Les attributs de balise tels que href, src et data-* sont accessibles comme les clés d’un dictionnaire à l’aide de .get('attr_name'). Cette méthode renvoie None en toute sécurité si l’attribut est absent.
from bs4 import BeautifulSoup
html = '''
<a href="https://example.com/page" data-id="42">Click here</a>
<img src="/images/logo.png" alt="Logo">
'''
soup = BeautifulSoup(html, 'html.parser')
link = soup.find('a')
print(link.get('href')) # 'https://example.com/page'
print(link.get('data-id')) # '42'
print(link.get('class')) # None (no class attribute)
img = soup.find('img')
print(img.get('src')) # '/images/logo.png'Parcourir l’arbre d’analyse
Les éléments BeautifulSoup entretiennent des relations de parenté, d’enfant et de voisinage que vous pouvez parcourir. Utilisez .parent, .children, .next_sibling et .previous_sibling pour vous déplacer autour d’un élément trouvé.
from bs4 import BeautifulSoup
html = '''
<div class="article">
<h2>Headline</h2>
<p>First paragraph.</p>
<p>Second paragraph.</p>
</div>
'''
soup = BeautifulSoup(html, 'html.parser')
h2 = soup.find('h2')
print(h2.text) # 'Headline'
print(h2.parent['class']) # ['article']
print(h2.next_sibling.next_sibling.text) # 'First paragraph.'Extraire tous les liens d’une page
Une tâche courante pour un agent consiste à collecter tous les liens d’une page afin de les explorer ensuite. Trouvez toutes les balises <a> et extrayez leurs attributs href, en filtrant celles qui sont vides.
from bs4 import BeautifulSoup
import httpx
def extract_links(url: str) -> list:
response = httpx.get(url, timeout=10.0)
soup = BeautifulSoup(response.text, 'html.parser')
links = []
for tag in soup.find_all('a'):
href = tag.get('href')
if href and href.startswith('http'):
links.append(href)
return links
# urls = extract_links('https://news.ycombinator.com')
# print(urls[:5])Gérer correctement le HTML mal formé
Le HTML réel est souvent mal formé : balises non fermées, éléments incompatibles ou problèmes d’encodage. L’analyseur de BeautifulSoup est tolérant et tente de corriger automatiquement les erreurs. Toutefois, vérifiez toujours que la valeur n’est pas None lorsque vous accédez à des éléments imbriqués.
from bs4 import BeautifulSoup
# Broken HTML — missing closing tags
html = '<div><p>Hello <strong>World</div>'
soup = BeautifulSoup(html, 'html.parser')
# BS4 repairs the tree automatically
print(soup.prettify())
# <div><p>Hello <strong>World</strong></p></div>
# Safe chained access
price = soup.find('span', class_='price')
price_text = price.text.strip() if price else 'N/A'
print(price_text) # 'N/A'Outil complet d’extraction pour un agent
Voici un outil d’extraction complet : une fonction qu’un agent peut appeler comme outil. Elle récupère une page, l’analyse et renvoie des données structurées dans un format que l’agent peut interpréter.
from bs4 import BeautifulSoup
import httpx
def scrape_article(url: str) -> dict:
response = httpx.get(url, headers={'User-Agent': 'MyAgent/1.0'}, timeout=10.0)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1')
paragraphs = soup.find_all('p')
return {
'url': url,
'title': title.text.strip() if title else '',
'text': ' '.join(p.text.strip() for p in paragraphs[:5]),
'links': [a.get('href') for a in soup.find_all('a', href=True)][:10]
}Contrôle des connaissances : BeautifulSoup
Vérifiez votre compréhension de l’analyse HTML avec BeautifulSoup.
Récapitulatif : analyser du HTML avec BeautifulSoup
Vous pouvez désormais extraire des données structurées de pages HTML au sein de vos agents :
- Créez un objet d’analyse avec
BeautifulSoup(html, 'html.parser') - Utilisez
find()pour un élément unique etfind_all()pour plusieurs éléments - Utilisez
select()pour les requêtes utilisant des sélecteurs CSS - Récupérez le texte avec
.text.strip()et les attributs avec.get('attr') - Parcourez l’arbre avec
.parent,.childrenet les éléments frères
Associé à un client HTTP, BeautifulSoup permet à votre agent de lire n’importe quelle page web.
Questions Fréquemment Posées
La leçon « Analyser du HTML avec BeautifulSoup » est-elle gratuite ?
Oui — le texte complet de « Analyser du HTML avec BeautifulSoup » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Analyser du HTML avec BeautifulSoup » ?
find(), select(), sélecteurs CSS et extraction de contenu structuré depuis du HTML. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Analyser du HTML avec BeautifulSoup » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Clients HTTP pour agents : httpx et requests
- Analyser du HTML avec BeautifulSoup
- Gérer la pagination et le contenu dynamique
- Pratiques de collecte respectueuses