Projet complet de Data Science appliquée au football : collecte automatique de données depuis FBref via web scraping, stockage SQLite, et visualisation interactive via un tableau de bord Django.
Construire un pipeline complet collecte → stockage → visualisation pour analyser les performances des 5 grands championnats européens de football sur la saison 2024-25 :
FBref.com → Scraper Python → SQLite → Dashboard Django
| Ligue | Pays | Équipes | Matchs |
|---|---|---|---|
| 🏴 Premier League | Angleterre | 20 | 380 |
| 🇪🇸 La Liga | Espagne | 20 | 380 |
| 🇮🇹 Serie A | Italie | 20 | 380 |
| 🇫🇷 Ligue 1 | France | 18 | 306 |
| 🇩🇪 Bundesliga | Allemagne | 18 | 306 |
| Métrique | Valeur |
|---|---|
| ⚽ Buts marqués | 4 741 |
| 🏟️ Matchs joués | 2 136 |
| 👤 Joueurs trackés | 2 773 |
| 🛡️ Clubs | 96 |
| 🎯 Passes décisives | 3 391 |
| 📸 Photos joueurs | 2 533 |
webscrapping/
│
├── 📁 scrapping/ # Partie 1 — Collecte des données
│ ├── main.py # Orchestrateur principal
│ ├── settings.py # Configuration ligues et URLs
│ ├── browser.py # Playwright + anti-Cloudflare
│ ├── fixtures.py # Classements et résultats
│ ├── players.py # Statistiques joueurs
│ ├── teams.py # Statistiques équipes
│ ├── images.py # Photos joueurs
│ ├── logos.py # Logos clubs
│ ├── db.py # Base SQLite
│ ├── requirements.txt # Dépendances
│ ├── football.db # Base de données générée
│ └── images/
│ ├── players/ # 2533 photos joueurs
│ └── logos/ # 96 logos clubs
│
└── 📁 football_dashboard/ # Partie 2 — Visualisation
├── run.py # Lancement rapide
├── manage.py # Commande Django
├── football.db # Base de données (copie)
├── dashboard/
│ ├── data.py # Requêtes SQL
│ ├── views.py # Logique des pages
│ └── urls.py # Routing
├── templates/dashboard/ # Pages HTML
│ ├── base.html # Template de base
│ ├── home.html # Accueil
│ ├── ligue.html # Détail championnat
│ ├── joueurs.html # Grille joueurs
│ ├── equipes.html # Comparaison équipes
│ └── matchs.html # Résultats
├── static/css/style.css # Design dark mode
└── media/ # Images servies
├── players/
└── logos/
- Python 3.10+
- pip
git clone https://github.com/moustxf05/Project-python-webscraping-football.git
cd Project-python-webscraping-footballpip install -r scrapping/requirements.txtcd scrapping
# Installer le navigateur Playwright
playwright install chromium
# Lancer la collecte complète
python main.py
⚠️ Durée estimée : 5 a 10 minutes (délais anti-Cloudflare inclus).
La basefootball.dbest déjà fournie - cette étape est optionnelle.
cd football_dashboard/football_dashboard
# Windows — copier les images
xcopy /E /I ..\..\scrapping\images\players media\players
xcopy /E /I ..\..\scrapping\images\logos media\logos
# Mac/Linux — copier les images
cp -r ../../scrapping/images/players media/players
cp -r ../../scrapping/images/logos media/logos
# Lancer le serveur
python manage.py runserverOuvrir dans le navigateur : http://127.0.0.1:8000/
python run.py
# Lance le serveur ET ouvre le navigateur automatiquement| Page | URL | Contenu |
|---|---|---|
| 🏠 Accueil | / |
KPIs, Top 10 buteurs avec photos, comparaison ligues |
| 🏆 Ligue | /ligue/Premier League/ |
Classement avec logos, buts/journée, stars |
| 👤 Joueurs | /joueurs/ |
Grille filtrable par ligue/poste/tri |
| 🛡️ Équipes | /equipes/ |
Top attaques, défenses, possession |
| 📋 Matchs | /matchs/ |
Tous les résultats, recherche live |
| Joueur | Club | Ligue | Buts | Assists |
|---|---|---|---|---|
| Kylian Mbappé | Real Madrid | 🇪🇸 La Liga | 31 | 3 |
| Mohamed Salah | Liverpool | 🏴 PL | 29 | 18 |
| Robert Lewandowski | Barcelona | 🇪🇸 La Liga | 27 | 2 |
| Harry Kane | Bayern Munich | 🇩🇪 Bundesliga | 26 | 9 |
| Mateo Retegui | Atalanta | 🇮🇹 Serie A | 25 | 8 |
| Ligue | % Dom. | % Ext. | Équilibre |
|---|---|---|---|
| 🇫🇷 Ligue 1 | 46% | 33% | Faible |
| 🇪🇸 La Liga | 44% | 30% | Faible |
| 🏴 Premier League | 41% | 35% | Moyen |
| 🇮🇹 Serie A | 40% | 32% | Moyen |
| 🇩🇪 Bundesliga | 38% | 36% | Très élevé |
💡 La Bundesliga est la ligue la plus équilibrée d'Europe (seulement 2% d'écart).
| Outil | Usage |
|---|---|
| Playwright | Navigation automatisée + contournement Cloudflare |
| BeautifulSoup4 | Parsing HTML des tableaux FBref |
| requests | Téléchargement images avec cookies |
| SQLite | Stockage des données |
| ThreadPoolExecutor | Téléchargement parallèle des images |
| Django 6 | Framework web du dashboard |
| Chart.js | Graphiques interactifs (barres, courbes, bulles) |
| Loguru | Logging structuré du scraping |
Ce projet est réalisé à des fins éducatives uniquement.
Les données proviennent de FBref.com Sports Reference LLC.
Mouhamed Moustapha Ndiaye
Étudiant en Data Science
🔗 GitHub