Vous avez besoin de données depuis un site web. Est-ce que vous écrivez un scraper Python ? Lancez Playwright ? Utilisez une extension navigateur ? Après avoir extrait des données depuis des centaines de sites différents, j'ai développé un framework pour choisir le bon outil.
Les Options
| Approche | Exécution | Gère le JS | Support connexion | Temps de setup |
|---|---|---|---|---|
| Python + requests | Serveur | ❌ | Cookies manuels | 5 min |
| Python + BeautifulSoup | Serveur | ❌ | Cookies manuels | 5 min |
| Playwright/Puppeteer | Serveur | ✅ | Scriptable | 15 min |
| Extension navigateur | Navigateur de l'utilisateur | ✅ | Automatique | 0 min |
| Copier-coller | Navigateur de l'utilisateur | ✅ | Automatique | 0 min |
Chaque option a ses compromis. Détaillons-les.
Option 1 : Python + Requests/BeautifulSoup
Idéal pour : Pages HTML statiques, APIs, pipelines automatisés
import requests
from bs4 import BeautifulSoup
response = requests.get("https://example.com/data")
soup = BeautifulSoup(response.text, "html.parser")
table = soup.find("table")
rows = []
for tr in table.find_all("tr"):
row = [td.get_text(strip=True) for td in tr.find_all(["td", "th"])]
rows.append(row)
Avantages :
- Exécution rapide
- Facile à planifier (cron, Airflow)
- Pas de surcharge navigateur
Limitations :
- N'exécute pas le JavaScript
- Beaucoup de sites modernes rendent les tableaux côté client
- L'authentification nécessite la gestion manuelle des cookies
Quand ça échoue : Essayez de scraper un dashboard React. Le HTML que vous obtenez est un <div id="root"></div> vide.
Option 2 : Navigateurs Headless (Playwright/Puppeteer)
Idéal pour : Pages rendues en JavaScript, pipelines automatisés, sites nécessitant de l'interaction
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com/dashboard');
// Attendre que le tableau soit rendu
await page.waitForSelector('table');
const data = await page.evaluate(() => {
const table = document.querySelector('table');
return Array.from(table.rows).map(row =>
Array.from(row.cells).map(cell => cell.textContent.trim())
);
});
console.log(data);
await browser.close();
})();
Avantages :
- Exécute le JavaScript
- Peut interagir avec les pages (clics, scrolls, formulaires)
- Flux d'authentification scriptables
Limitations :
- Plus lent que le HTTP direct
- Gourmand en ressources (mémoire, CPU)
- Gestion d'erreurs plus complexe
- Les sites peuvent détecter les navigateurs headless
Quand ça échoue : Beaucoup de sites détectent Puppeteer/Playwright via les propriétés navigator, le fingerprinting WebGL ou l'analyse comportementale. Les plugins stealth aident mais ne sont pas infaillibles.
Option 3 : Extensions Navigateur
Idéal pour : Extraction ponctuelle, sites authentifiés, workflows initiés par l'utilisateur
Une extension navigateur s'exécute dans la session réelle du navigateur de l'utilisateur, avec un accès complet à :
- Les sessions authentifiées
- Le contenu rendu en JavaScript
- Le DOM exact que l'utilisateur voit
Pour une comparaison des meilleures options, consultez Les 5 Meilleures Extensions Chrome pour Exporter des Tableaux.
// Content script dans une extension Chrome
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
if (msg.type === "EXTRACT_TABLE") {
const table = document.querySelector("table");
const data = Array.from(table.rows).map(row =>
Array.from(row.cells).map(cell => cell.textContent.trim())
);
sendResponse({ data });
}
});
Avantages :
- Zéro gestion d'authentification — vous êtes déjà connecté
- Voit exactement ce que vous voyez (pas de problèmes de rendu JS)
- Fonctionne sur n'importe quel site (pas de détection de bot)
- Pas d'infrastructure serveur nécessaire
Limitations :
- Nécessite un déclenchement manuel (l'utilisateur clique)
- Ne peut pas tourner sur un planning
- Limité au contexte navigateur
Quand ça échoue : Vous avez besoin d'extraire des données de 10 000 pages automatiquement. Les extensions sont pour les workflows initiés par l'utilisateur, pas le traitement par lots.
Framework de Décision
Utilisez Python + requests quand :
- ✅ La page est du HTML rendu côté serveur
- ✅ Vous avez besoin d'une extraction automatisée/planifiée
- ✅ Vous construisez un pipeline de données
- ✅ L'authentification se fait via des clés API ou des cookies simples
Utilisez Playwright/Puppeteer quand :
- ✅ La page nécessite un rendu JavaScript
- ✅ Vous avez besoin d'une extraction automatisée/planifiée
- ✅ Vous devez interagir (scroller, cliquer, paginer)
- ✅ Vous pouvez gérer les contre-mesures anti-bot
Utilisez une Extension Navigateur quand :
- ✅ Vous êtes déjà connecté au site
- ✅ Vous avez besoin de données occasionnellement (pas d'automatisation)
- ✅ Le site a une forte détection de bots
- ✅ Vous voulez les données MAINTENANT sans écrire de code
Faites un copier-coller quand :
- ✅ Extraction unique
- ✅ Structure de tableau simple
- ✅ Vous n'avez pas besoin d'un format spécifique
Exemples Concrets
Exemple 1 : Tableaux Wikipedia
Meilleure approche : Extension navigateur ou Python
Wikipedia est du HTML rendu côté serveur sans authentification. Python fonctionne parfaitement :
import pandas as pd
url = "https://fr.wikipedia.org/wiki/Liste_des_pays_par_population"
tables = pd.read_html(url)
df = tables[0]
Mais les tableaux Wikipedia ont souvent des rowspans complexes et des lignes de navigation. Une extension dédiée les gère automatiquement.
Pour un guide détaillé, consultez Scraper de Tableaux HTML : Les Meilleures Extensions Chrome.
Exemple 2 : Dashboard Financier (Derrière Connexion)
Meilleure approche : Extension navigateur
Votre courtier affiche les données du portefeuille après connexion. Options :
Python : Faire du reverse-engineering du flux d'authentification, gérer la 2FA, maintenir les cookies de session. Possible mais fragile.
Playwright : Scripter le login, gérer les prompts 2FA, naviguer vers les données. Ça marche mais c'est complexe.
Extension : Se connecter normalement, cliquer « Exporter le Tableau ». Terminé.
Pour des exports occasionnels, l'extension gagne en temps d'accès aux données.
Exemple 3 : Surveillance de Prix Quotidienne (1000 Pages)
Meilleure approche : Playwright + file d'attente
Vous devez vérifier les prix sur 1000 pages produit chaque jour. Cela nécessite :
// Pseudocode pour l'extraction par lots
const urls = loadUrlsFromDatabase();
for (const url of urls) {
const page = await browser.newPage();
await page.goto(url);
await page.waitForSelector('.price');
const price = await page.evaluate(() =>
document.querySelector('.price').textContent
);
await saveToDatabase(url, price);
await page.close();
// Limitation de débit
await sleep(randomBetween(1000, 3000));
}
Les extensions ne peuvent pas faire ça — elles nécessitent une interaction utilisateur. Playwright est le bon outil.
Exemple 4 : Export Ponctuel de Stats Sportives
Meilleure approche : Extension navigateur
FBRef a des en-têtes complexes à deux niveaux. Vous avez besoin des stats de cette saison une seule fois.
Approche Python : 30 minutes à écrire un parser personnalisé pour leur structure de tableau.
Approche Extension : Cliquer exporter. 10 secondes.
Pour une extraction ponctuelle, ne sur-ingénieriez pas.
Approches Hybrides
Parfois vous avez besoin des deux :
-
Utiliser l'extension pour exporter les cookies d'authentification
- Exporter les cookies d'une session connectée
- Les importer dans Python/Playwright pour l'automatisation
-
Utiliser l'extension pour inspecter la structure, Python pour scaler
- Examiner manuellement le DOM avec les outils de l'extension
- Écrire un scraper ciblé une fois la structure comprise
-
Utiliser Playwright pour la navigation, l'extension pour l'extraction
- Le script navigue vers la page
- Appelle l'API de l'extension pour le parsing complexe de tableaux
Ma Stack
Pour 80% des cas où j'ai besoin de données de tableaux web :
- Ponctuel, authentifié : HTML Table Exporter (extension navigateur que j'ai créée)
-
Ponctuel, données publiques :
pd.read_html()ou extension - Pipeline automatisé : Playwright avec des parsers personnalisés
- API disponible : Appels API directs (toujours préférable)
Le meilleur outil dépend de l'extraction spécifique. Adaptez la complexité de votre solution à la complexité de votre problème.
Quelle est votre approche d'extraction préférée ? En savoir plus sur gauchogrid.com/fr/html-table-exporter ou essayez l'extension gratuitement sur le Chrome Web Store.
Top comments (0)