Programme Python pour Extraire le Contenu d’un Site Web
Un programme Python de web scraping télécharge le HTML et extrait les éléments sélectionnés. BeautifulSoup transforme le balisage en un arbre de balises, d’attributs, de texte et de liens interrogeable. Le flux de travail est : requête, validation, analyse, sélection et sauvegarde. Dans web.run, Python s’exécute via Pyodide, de sorte que l’activité réseau et les paquets chargés apparaissent également dans Run Details.
Programme Python pour Extraire le HTML d’un Site
Sortie :
La sortie apparaîtra ici...
Sortie :
Title: Header
Links found: 9
Comment Fonctionne Cet Exemple
pyfetchenvoie une requête asynchrone, le programme utilise doncawaitau niveau supérieur.- La vérification du statut empêche les pages d’erreur d’être analysées comme le document cible.
response.string()lit le corps de la réponse, que BeautifulSoup analyse avechtml.parser.find("h1")renvoie le premier titre, tandis quefind_all("a")renvoie tous les liens.
Inspecter le Scraper avec Run Details
Ouvrez Run Details après la fin du programme. Il sépare la requête de page effectuée par le scraper de l’activité des paquets nécessaire à l’exécution du code.
| Signal Run Details | Signification |
|---|---|
| Requests affiche un GET vers raw.githubusercontent.com | Le scraper a tenté de télécharger le fichier HTML |
| Le statut de la requête est 200 | Le navigateur a reçu la page avec succès |
| La requête a échoué ou est bloquée | Vérifier la connectivité et si la cible autorise les requêtes cross-origin depuis le navigateur |
| Packages liste beautifulsoup4 | web.run a détecté l’import bs4 et chargé le paquet compatible |
| Statut 200 mais valeurs extraites manquantes | Le réseau fonctionne ; inspecter le HTML et les sélecteurs |
La durée à côté de la requête mesure le téléchargement de la page ; la durée totale inclut également le chargement du paquet, l’analyse et l’exécution Python. BeautifulSoup est normalement téléchargé lors de la première exécution et reste disponible dans l’environnement d’exécution actuel, de sorte que les exécutions ultérieures peuvent être plus rapides et ne pas afficher d’activité de paquet.
Comment Faire du Web Scraping avec Python
- Choisissez une page qui autorise l’accès automatisé et les requêtes depuis le navigateur.
- Téléchargez le HTML et rejetez les statuts HTTP non réussis avant l’analyse.
- Créez un seul objet BeautifulSoup à partir du corps de la réponse.
- Inspectez le balisage et sélectionnez les éléments par balise sémantique, attribut ou sélecteur CSS.
- Normalisez le texte extrait et résolvez les URL relatives avant de sauvegarder les résultats.
Autres Exemples Python BeautifulSoup
Extraire tous les titres de section
Utilisez un sélecteur CSS pour collecter plusieurs niveaux de titres :
for heading in soup.select("h2, h3"):
print(heading.get_text(" ", strip=True))
Le séparateur maintient le texte des balises imbriquées séparé, tandis que strip=True supprime les espaces blancs environnants.
Extraire et normaliser les liens
Résoudre les liens absolus, relatifs et de fragment par rapport à l’URL de la page :
from urllib.parse import urljoin
for link in soup.select("a[href]"):
print(urljoin(url, link["href"]))
Le sélecteur [href] exclut les ancres sans destination, rendant l’accès à l’attribut sûr.
Choisir les Sélecteurs BeautifulSoup
| Tâche | Sélecteur | Résultat |
|---|---|---|
| Premier titre de page | soup.find("h1") | Une balise ou None |
| Tous les liens | soup.find_all("a") | Une liste de balises |
| Liens avec destination | soup.select("a[href]") | Balises correspondant à un sélecteur CSS |
| Éléments dans un article | soup.select("article .item") | Seulement les descendants correspondants |
Utilisez find quand un seul élément est attendu, find_all pour une collection basée sur les balises et select quand les relations ou attributs rendent un sélecteur CSS plus clair.
Pièges du Web Scraping en Python
- Toutes les URL ne sont pas accessibles. Pyodide s’exécute dans le navigateur, donc une page peut s’ouvrir dans un onglet mais rejeter une requête cross-origin depuis web.run.
- Les éléments manquants nécessitent une vérification explicite. BeautifulSoup renvoie
Nonequand un sélecteur ne correspond à rien ; accéder immédiatement à son texte lèverait une erreur. - Le contenu généré par JavaScript est absent du HTML téléchargé. BeautifulSoup analyse la réponse du serveur mais n’exécute pas les scripts ; inspectez le corps de la réponse quand un sélecteur ne retourne aucun résultat.
Respectez les règles d’exploration, limitez la fréquence des requêtes, mettez en cache les pages inchangées et réduisez la charge quand le serveur signale trop de requêtes.
Pour le flux de contrôle environnant, voir gestion des exceptions Python et vérifications conditionnelles Python.
FAQ
Quelle bibliothèque Python est utilisée pour le web scraping ?
BeautifulSoup analyse et interroge le HTML téléchargé. Un client réseau comme pyfetch récupère le document, tandis que BeautifulSoup sélectionne les éléments par balise, attribut ou sélecteur CSS.
BeautifulSoup peut-il scraper des sites web JavaScript ?
BeautifulSoup analyse le HTML fourni par le serveur mais n’exécute pas JavaScript. Les éléments créés uniquement après l’exécution des scripts n’apparaîtront pas dans le document analysé.