scraper des données avec python et beautifoulsoup

  • Tu vas vérifier robots.txt avant de lancer ton scraper
  • Tu vas savoir quand Beautiful Soup suffit et quand JavaScript bloque
  • Tu vas rendre tes sélecteurs plus solides
  • Tu vas sortir un CSV propre au lieu d’un fichier bricolé

Beautiful Soup reste une très bonne porte d’entrée pour récupérer des données dans une page HTML. Les contenus récents qui se placent bien sur Google ajoutent par contre trois points que l’ancien tuto doit renforcer. Le respect du robots.txt, la différence entre HTML statique et page rendue par JavaScript, puis la gestion de la pagination. Sans ça, un scraper marche une fois sur un exemple, puis casse dès que la page bouge.

Beautiful Soup lit du HTML. Si le contenu apparaît seulement après exécution JavaScript, il faudra récupérer l’HTML rendu avec un navigateur automatisé ou chercher une API officielle.

Le plan propre avant de scraper

Avant la première requête, note les données que tu veux vraiment. Un titre, un prix, une date, un lien, une image. Ouvre ensuite le code source de la page, pas seulement l’inspecteur du navigateur. Si les données sont déjà dans la source, requests et Beautiful Soup peuvent suffire. Si elles n’y sont pas, le site charge probablement les données après coup.

Infographie scraper Python Beautiful Soup avec robots txt pagination et CSV
Un scraper propre commence avant la première requête
Contrôle Pourquoi Bon réflexe
robots.txt Savoir ce que le site autorise Lire le fichier avant de coder
HTML source Vérifier si la donnée existe déjà Comparer source et inspecteur
Sélecteurs Éviter un scraper trop fragile Cibler une structure stable
Pagination Récupérer plusieurs pages sans boucle folle Limiter le nombre de pages au début

Ce qui rend le script plus fiable

Ajoute un délai entre les pages. Un petit scraper perso n’a pas besoin de marteler un serveur. Prévois aussi un message clair quand la page ne répond pas, quand un sélecteur ne trouve rien ou quand le fichier CSV ne peut pas être écrit. Ce sont ces détails qui font la différence entre un test sympa et un script que tu peux relancer sans serrer les dents.

Pour la sortie, garde un CSV simple avec des noms de colonnes nets. Titre, lien, date, prix, source. Si tu dois ensuite transformer ces données en document, tu peux relier ce tuto à la génération de PDF avec Python. Le combo scraper propre puis export lisible reste beaucoup plus utile qu’un script qui affiche juste trois lignes dans le terminal.

Teste ton scraper sur une seule page, puis sur trois pages, puis seulement après sur une liste plus longue. Tu verras les erreurs avant de créer un fichier rempli de trous.

Créer un scraper web en Python : un guide étape par étape

Les outils de scraping sont extrêmement utiles pour extraire des données de pages web. Dans ce tutoriel, nous allons explorer comment créer un simple scraper web en Python en utilisant Beautiful Soup et Requests, deux bibliothèques puissantes et faciles à utiliser. Cependant, si vous souhaitez récolter des données en provenance de sites avec de fortes restrictions, vous allez devoir utiliser un proxy pour votre web scraper.

 

Configuration de l’environnement

Assure-toi d’avoir Python installé sur ton ordinateur. Nous aurons également besoin de deux bibliothèques : Requests pour faire des requêtes HTTP et Beautiful Soup pour analyser le HTML que nous récupérons. Tu peux les installer avec pip :

pip install requests beautifulsoup4

 

Étape 1 : Faire une requête HTTP

Tout d’abord, nous devons faire une requête HTTP pour obtenir le HTML de la page que nous voulons scraper. Nous allons utiliser la bibliothèque Requests pour cela (pensez a bien sécuriser votre code Python).

import requests

url = "http://books.toscrape.com/"
response = requests.get(url)

print(response.status_code)

Si le code de statut est 200, cela signifie que la requête a réussi.

 

Étape 2 : Analyser le HTML avec Beautiful Soup

Une fois que nous avons le HTML, nous pouvons l’analyser avec Beautiful Soup pour extraire les informations que nous voulons.

from bs4 import BeautifulSoup

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

print(soup.prettify())

La méthode prettify() rend le HTML plus lisible en ajoutant des sauts de ligne et des indentations.

 

Étape 3 : Extraire les données

Supposons que nous voulions extraire le titre et le prix de tous les livres sur la page. Nous pouvons utiliser les méthodes find_all() ou select() de Beautiful Soup pour sélectionner les éléments HTML qui contiennent ces informations.

books = soup.find_all('article', class_='product_pod')

for book in books:
    title = book.h3.a['title']
    price = book.find('p', class_='price_color').text
    print(title, price)

 

Étape 4 : Naviguer à travers les pages

Si nous voulons scraper plus d’une page, il faut ajouter une boucle pour naviguer à travers les pages. Nous pouvons le faire en ajoutant à l’URL le numéro de la page que nous voulons scraper.

base_url = "http://books.toscrape.com/catalogue/page-{}.html"

for i in range(1, 51):
    url = base_url.format(i)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    books = soup.find_all('article', class_='product_pod')

    for book in books:
        title = book.h3.a['title']
        price = book.find('p', class_='price_color').text
        print(title, price)

 

Étape 5 : Gérer les erreurs

Dans un monde parfait, toutes nos requêtes HTTP réussiraient du premier coup. Toutefois, le web est imprévisible, et parfois une requête peut échouer. Pour rendre notre scraper plus robuste, nous devrions ajouter une gestion des erreurs.

for i in range(1, 51):
    url = base_url.format(i)
    
    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.exceptions.HTTPError as err:
        print(f"Une erreur HTTP s'est produite : {err}")
        continue

    soup = BeautifulSoup(response.text, 'html.parser')
    # Reste du code...

La méthode raise_for_status() lève une exception si la requête a échoué. Nous capturons cette exception avec un bloc try/except et continuons avec la prochaine itération de la boucle.

 

Étape 6 : Manipulation et stockage des données

Une fois que nous avons nos données, nous allons les stocker pour une utilisation ultérieure. Python a plusieurs options pour le stockage des données, mais pour cet exemple, nous utiliserons pandas pour créer un DataFrame et stocker nos données dans un fichier CSV.

Tout d’abord, tu auras besoin d’installer pandas avec pip :

pip install pandas

Ensuite, tu peux modifier notre boucle de scrapping comme suit :

import pandas as pd

base_url = "http://books.toscrape.com/catalogue/page-{}.html"
data = {"Titre": [], "Prix": []}

for i in range(1, 51):
    url = base_url.format(i)

    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.exceptions.HTTPError as err:
        print(f"Une erreur HTTP s'est produite : {err}")
        continue

    soup = BeautifulSoup(response.text, 'html.parser')
    books = soup.find_all('article', class_='product_pod')

    for book in books:
        title = book.h3.a['title']
        price = book.find('p', class_='price_color').text
        data["Titre"].append(title)
        data["Prix"].append(price)

df = pd.DataFrame(data)
df.to_csv("books.csv", index=False)

Avec ces additions, ton scraper est maintenant capable de gérer les erreurs de requête et de stocker les données scrapées dans un fichier CSV pour une analyse ultérieure.

Voilà ! Tu as créé un simple scraper web en Python. Tu peux maintenant l’adapter pour scraper n’importe quel site web que tu veux, en gardant à l’esprit de toujours respecter les conditions d’utilisation du site.

Le scraping web est un outil puissant pour extraire des données à grande échelle, mais il doit être utilisé de manière responsable. Assure-toi de toujours respecter les lois et règlements relatifs à la vie privée et aux données.

5/5 - (1 vote)