Le scraping

l'art d'éviter les copier-coller

Philippe Escalle CTO

Le business du Ctrl+C / Ctrl+V est en sursis

On ne compte plus le nombre de CEO qui demandent d’un air ingénu : « On peut scraper LinkedIn ? ». Spoiler : non, sauf si votre rêve est de recevoir une lettre d’avocat frappée du logo Microsoft. Mais pour tout le reste, le scraping est l’un des super-pouvoirs les plus sous-estimés du numérique.

Le web est rempli de données accessibles mais pas exploitables. Un gigantesque buffet dans lequel personne n’a pensé à mettre de couverts. Et pendant que certains se résignent à faire des copier-coller manuels depuis des carrousels Bootstrap, un script bien affûté peut transformer un tas de <div> cabossés en un joli JSON prêt à l’emploi.

L’usage réel : quand c’est le client qui supplie

Dernier cas vécu : un client veut récupérer les 173 commentaires affichés sur son site. Pas de base de données. Pas d’API. Pas même un pauvre flux JSON. Juste un HTML antique imbibé de classes Bootstrap façon archéologie industrielle.
Ils étaient littéralement sur le point d’ouvrir Excel et de copier coller les témoignages un par un depuis un carrousel. Une punition médiévale.

En identifiant deux classes récurrentes – temoignages_text, date_com, et quelques autres – un simple script Python + BeautifulSoup (50 lignes, pas plus) a extrait l’ensemble en trois secondes :

import requests
from bs4 import BeautifulSoup
import json

URL = "https://www.votreurl.com/fr"

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

reviews = []

# Tous les blocs témoignages
items = soup.select(".carousel-item-contenu")

for item in items:
    # Auteur
    author_elem = item.select_one(".temoignages_author")
    author = author_elem.get_text(strip=True) if author_elem else ""

    # Date
    date_elem = item.select_one(".temoignages_date")
    date = date_elem.get_text(strip=True) if date_elem else ""

    # Rating = nombre d'étoiles <li>
    stars = item.select(".tem-etoile-ul li")
    rating = len(stars)

    # Image client
    img_elem = item.select_one(".temoignage-ordre1 img")
    image = img_elem["src"] if img_elem else ""

    # Texte du témoignage
    text_elem = item.select_one(".temoignages_text")
    text = text_elem.get_text(" ", strip=True) if text_elem else ""
    text = text.replace("'", "\\'")  # échappement JS

    reviews.append({
        "author": author,
        "date": date,
        "rating": rating,
        "text": text,
        "image": image,
    })

# Sauvegarde JSON
with open("avis.json", "w", encoding="utf-8") as f:
    json.dump(reviews, f, indent=4, ensure_ascii=False)

print(f"{len(reviews)} témoignages extraits.")

Le Résultat (3 secondes de script) :

C’est ça, le vrai pouvoir du scraping : libérer des données coincées dans du HTML.

Quand on scrape pour de vrai

  • Surveiller les prix des concurrents → usage légitime, massif, archi répandu.
  • Récupérer des leads corporate → faisable, mais juridiquement piquant.
  • Scraper LinkedIn → non, vraiment, non.

Mais dans 30% des cas… c’est juste un client qui a besoin de récupérer ses propres données, coincées dans un site vieillissant sans back-end. Dans ces situations, le scraping n'est pas une technique borderline : c'est un outil de migration.

Les outils : la trousse de secours

BeautifulSoup

Le couteau suisse pour le HTML statique. Rapide, léger, efficace pour nettoyer des données mal structurées.

Playwright

Pour le web moderne (React, Vue). Il pilote un vrai navigateur pour charger le JS dynamique.

Scrapy

Le bulldozer optimisé. Si vous devez avaler 10 000 pages statiques, c'est l'outil qu'il vous faut.

Proxies rotatifs

Votre manteau d'invisibilité pour ne pas être banni au bout de 4 minutes par Amazon.

⚖️ Légalité : le résumé honnête

  • Scraper des prix publics : Toléré, risque faible.
  • Scraper des emails pro : Terrain miné (RGPD).
  • Scraper LinkedIn : Interdit, inutile d'insister.

L'oeil du CTO

" Le scraping n’est pas qu’un gadget pour growth hackers en goguette. C’est un outil capable de : débloquer des migrations de sites hérités, récupérer des données auxquelles le client a droit mais qu’il ne peut plus exporter, surveiller les concurrents, éviter des heures de copier-coller improductif. Il doit être abordé avec rigueur, mais sans frilosité. Bien utilisé, il transforme des pages mortes en matière première exploitable. Le vrai enjeu n’est pas de savoir si on peut scraper, mais quelle valeur on crée une fois les données libérées. "

Philippe Escalle — version IA