Voici une cheatsheet pour l’utilisation de BeautifulSoup en Python pour l’extraction et la manipulation des données HTML :
Installation de BeautifulSoup
pip install beautifulsoup4
pip install lxml # Parser recommandé
Importer BeautifulSoup
from bs4 import BeautifulSoup
import requests
Charger et parser une page HTML
# À partir d'une chaîne de caractères HTML
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, 'lxml')
# À partir d'une URL
url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
Naviguer dans l’arbre DOM
# Trouver une balise par son nom
print(soup.title)
print(soup.title.name)
print(soup.title.string)
# Trouver une balise par son attribut
print(soup.find('a', {'class': 'sister'}))
# Trouver toutes les balises correspondantes
links = soup.find_all('a')
for link in links:
print(link.get('href'))
# Accéder au contenu des balises
print(soup.p)
print(soup.p['class'])
print(soup.p.text)
# Utiliser des sélecteurs CSS
print(soup.select('p.story'))
print(soup.select_one('p.story'))
Modifier le contenu du HTML
# Changer le texte d'une balise
soup.title.string = "New Title"
# Ajouter une nouvelle balise
new_tag = soup.new_tag('p')
new_tag.string = "This is a new paragraph."
soup.body.append(new_tag)
# Retirer une balise
soup.find('p', {'class': 'title'}).decompose()
Exemples spécifiques
Extraire tous les liens d’une page
url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
links = []
for link in soup.find_all('a'):
href = link.get('href')
if href:
links.append(href)
print(links)
Extraire des données d’une table HTML
html_doc = """
<table>
<tr><th>Header 1</th><th>Header 2</th></tr>
<tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr>
<tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr>
</table>
"""
soup = BeautifulSoup(html_doc, 'lxml')
table = soup.find('table')
headers = [header.text for header in table.find_all('th')]
rows = []
for row in table.find_all('tr')[1:]:
cells = row.find_all('td')
cells_text = [cell.text for cell in cells]
rows.append(cells_text)
print(headers)
print(rows)
Extraire des données d’un formulaire
html_doc = """
<form action="/submit" method="post">
<input type="text" name="username" value="user123">
<input type="password" name="password" value="secret">
<input type="submit" value="Login">
</form>
"""
soup = BeautifulSoup(html_doc, 'lxml')
form = soup.find('form')
inputs = form.find_all('input')
form_data = {input.get('name'): input.get('value') for input in inputs if input.get('name')}
print(form_data)
Conclusion
Avec cette cheatsheet, vous avez un guide complet pour effectuer des opérations courantes avec BeautifulSoup pour le web scraping et la manipulation de données HTML en Python.
0 commentaire