- New SCRAPER_REPRISE.md: Complete documentation for resume script * Explains the problem: Chrome crashes and 'invalid session id' errors * Describes the solution: Resume scraping from specific date * Detailed usage instructions with examples * Configuration guide for custom dates * Performance estimates and troubleshooting * Security guarantees (no data loss) * Connection to other documentation files - Covers: * How to launch and monitor the resume script * How to modify resume and end dates * Behavior (appends to existing CSV files) * Performance estimates * Troubleshooting common issues * Backup recommendations
FFA Calendar Scraper
Un systÚme complet pour scraper les données du site de la Fédération Française d'Athlétisme (FFA) et les organiser dans des fichiers CSV avec des fonctionnalités de recherche et d'analyse.
đ Table des matiĂšres
- Fonctionnalités
- Structure du projet
- Installation
- Configuration
- Utilisation
- Structure des données
- Scripts disponibles
- Version
- Contribuer
- Licence
⚠Fonctionnalités
Scraping des données
- Calendrier des compétitions: Récupération automatique du calendrier complet (2010-2026)
- Détails des courses: Extraction des informations détaillées de chaque compétition
- Résultats des compétitions: Récupération des résultats par athlÚte (place, temps, club)
- Multithreading: Scraping optimisé avec plusieurs workers pour accélérer le processus
- Pagination automatique: Détection automatique du nombre de pages et de courses
Analyse des données
- Recherche d'athlÚtes: Par nom/prénom dans toutes les compétitions
- Recherche de clubs: Identification des athlĂštes par club
- Recherche de courses: Par période de dates
- Statistiques détaillées: Performances par athlÚte, podiums, etc.
- Classements: Classements par club pour chaque course
Export et traitement
- Export CSV: Format compatible Excel, encodage UTF-8
- Export personnalisé: Export des résultats par athlÚte
- Post-traitement: Scripts pour analyser et transformer les données
đ Structure du projet
ffa-calendar/
âââ src/ # Modules Python principaux
â âââ ffa_scraper.py # Scraper principal
â âââ ffa_analyzer.py # Analyseur de donnĂ©es
âââ scripts/ # Scripts autonomes
â âââ ffa_cli.py # Interface CLI principale
â âââ search_athlete.py # Recherche d'athlĂštes
â âââ search_race.py # Recherche de courses
â âââ extract_races.py # Extraction des courses
â âââ list_clubs.py # Liste des clubs
â âââ post_process.py # Post-traitement des donnĂ©es
â âââ monitor_scraping.py # Surveillance du scraping
â âââ scrape_all_periods.py # Scraping par pĂ©riodes
â âââ athlete_summary.py # RĂ©sumĂ© par athlĂšte
âââ config/ # Fichiers de configuration
â âââ config.env # Configuration du scraper
âââ data/ # DonnĂ©es gĂ©nĂ©rĂ©es
â âââ courses/ # DonnĂ©es des courses
â â âââ periods/ # Courses par pĂ©riodes
â âââ resultats/ # RĂ©sultats des compĂ©titions
â âââ clubs/ # DonnĂ©es des clubs
â âââ exports/ # Exports personnalisĂ©s
âââ docs/ # Documentation
âââ tests/ # Tests unitaires
âââ requirements.txt # DĂ©pendances Python
âââ README.md # Ce fichier
âââ LICENSE # Licence MIT
âââ .gitignore # Fichiers ignorĂ©s par Git
đ Installation
Prérequis
- Python 3.8 ou supérieur
- Google Chrome (pour Selenium)
- pip (gestionnaire de paquets Python)
Ătapes d'installation
- Cloner le dépÎt
git clone https://github.com/votre-username/ffa-calendar.git
cd ffa-calendar
- Créer un environnement virtuel (recommandé)
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
- Installer les dépendances
pip install -r requirements.txt
- Configurer le scraper
cp config/config.env config/config.local.env
# Ăditez config/config.local.env selon vos besoins
âïž Configuration
Le scraper se configure via le fichier config/config.env. Les principaux paramĂštres sont:
Répertoires
OUTPUT_DIR: Répertoire de sortie des données (défaut:data)EXPORT_DIR: Répertoire pour les exports personnalisés
URLs
BASE_URL: URL de base du site de la FFA (défaut:https://athle.fr)CLUBS_URL: URL du site des clubs (défaut:https://monclub.athle.fr)CALENDAR_URL: URL du calendrier des compétitionsRESULTS_URL: URL des résultats
Performance
REQUEST_DELAY: DĂ©lai entre les requĂȘtes en secondes (dĂ©faut:2)MAX_RETRIES: Nombre maximum de tentatives pour une requĂȘte (dĂ©faut:3)TIMEOUT: Timeout des requĂȘtes en secondes (dĂ©faut:30)MAX_WORKERS: Nombre de workers pour le multithreading (dĂ©faut:4)
Scraping
DEFAULT_LIMIT_COURSES: Limite de courses Ă scraper (dĂ©faut:10000)DEFAULT_LIMIT_RESULTS: Limite de rĂ©sultats Ă scraper (dĂ©faut:50000)HEADLESS: Mode headless pour Selenium (dĂ©faut:True)WINDOW_SIZE: Taille de la fenĂȘtre du navigateur (dĂ©faut:1920,1080)
Logs
LOG_LEVEL: Niveau de log (DEBUG, INFO, WARNING, ERROR)LOG_FILE: Fichier de log (défaut:ffa_scraper.log)
CSV
CSV_ENCODING: Encodage des fichiers CSV (défaut:utf-8-sig)
đ Utilisation
Via l'interface CLI principale
Le script principal scripts/ffa_cli.py offre une interface complĂšte.
1. Vérifier le nombre de courses disponibles
python scripts/ffa_cli.py check
Cette commande détecte automatiquement:
- Le nombre total de pages de courses
- Le nombre estimé de courses
- Le temps estimé pour le scraping
2. Lister les données disponibles
python scripts/ffa_cli.py list
Affiche un résumé des données actuellement disponibles.
3. Lancer le scraping des données
python scripts/ffa_cli.py scrape --max-pages 7
Options:
--output: Répertoire de sortie des données--limit-courses: Limiter le nombre de courses à scraper--limit-results: Limiter le nombre de résultats à scraper--fetch-details: Récupérer les détails et résultats de chaque course--max-pages: Nombre maximum de pages à scraper--multithreading/--no-multithreading: Activer/désactiver le multithreading
3.5. Scraping complet par périodes (2010-2026)
Pour récupérer toutes les courses de 2010 à 2026 par lots de 15 jours:
python scripts/scrape_all_periods.py
Ce script va:
- Générer automatiquement 313 périodes de 15 jours
- Scraper en parallĂšle avec 8 workers (multithreading)
- Sauvegarder chaque période dans
data/courses/periods/ - Fusionner toutes les données dans
data/courses/courses_list.csv - Exécuter automatiquement les scripts de post-traitement
Résultats:
- Fichiers CSV individuels par période :
data/courses/periods/courses_YYYY-MM-DD_to_YYYY-MM-DD.csv - Fichier consolidé :
data/courses/courses_list.csv - Statistiques détaillées par année
Note: Ce processus peut prendre plusieurs heures selon le nombre de courses et votre connexion internet.
4. Rechercher des données
Rechercher un athlĂšte:
python scripts/ffa_cli.py search athlete --nom "BAZALGETTE" --prenom "Romain"
Rechercher un club:
python scripts/ffa_cli.py search club --nom "Moissac"
Rechercher des courses par période:
python scripts/ffa_cli.py search course --start-date "2024-01-01" --end-date "2024-12-31"
5. Afficher des statistiques
Statistiques d'un athlĂšte:
python scripts/ffa_cli.py stats athlete --nom "Dupont" --prenom "Jean"
Classement par club:
python scripts/ffa_cli.py stats club --course-url "https://athle.fr/competitions/course-123"
Top des athlĂštes:
python scripts/ffa_cli.py top --limit 10 --min-results 3
6. Exporter des données
Exporter les résultats d'un athlÚte:
python scripts/ffa_cli.py export athlete --nom "Dupont" --prenom "Jean" --filename "dupont_jean_results.csv"
Via les scripts autonomes
Recherche d'athlĂšte
python scripts/search_athlete.py --nom "Dupont" --prenom "Jean"
Options:
--nom: Nom de famille (obligatoire)--prenom: Prénom (optionnel)--data-dir: Répertoire des données (défaut: data)--csv-only: Utiliser uniquement les fichiers CSV
Recherche de course
python scripts/search_race.py --start-date "2024-01-01" --end-date "2024-12-31"
Extraction des courses
python scripts/extract_races.py --output data
Liste des clubs
python scripts/list_clubs.py
Résumé par athlÚte
python scripts/athlete_summary.py --data-dir data --output athlete_summary.csv
Via les modules Python
import sys
sys.path.insert(0, 'src')
from ffa_scraper import FFAScraper
from ffa_analyzer import FFADataAnalyzer
# Scraper
scraper = FFAScraper(output_dir="data")
stats = scraper.scrap_all_data(max_pages=7, use_multithreading=True)
# Analyseur
analyzer = FFADataAnalyzer(data_dir="data")
results = analyzer.search_athlete("Dupont", "Jean")
đ Structure des donnĂ©es
Fichiers générés
data/
âââ courses/
â âââ periods/
â âââ courses_2010-01-01_to_2010-01-15.csv
â âââ courses_2010-01-16_to_2010-01-30.csv
â âââ ...
âââ resultats/
â âââ results.csv
âââ clubs/
â âââ clubs.csv
âââ exports/
âââ athlete_dupont_jean.csv
Format des CSV
courses_*.csv
- nom: Nom de la course
- date: Date de la course
- lieu: Lieu de la course
- lien: URL vers la page de la course
- type: Type de course (Cross, Stade, Route, etc.)
- categorie: Catégorie de la compétition
results.csv
- place: Place obtenue
- nom: Nom de l'athlĂšte (en majuscules)
- prenom: Prénom de l'athlÚte
- club: Club de l'athlĂšte
- categorie: Catégorie de compétition
- temps: Temps réalisé
- course_url: URL de la course concernée
đ ïž Scripts disponibles
Scripts principaux
| Script | Description |
|---|---|
ffa_cli.py |
Interface CLI principale |
search_athlete.py |
Recherche d'athlÚtes dans les résultats |
search_race.py |
Recherche de courses par période |
extract_races.py |
Extraction des courses depuis le calendrier |
Scripts utilitaires
| Script | Description |
|---|---|
list_clubs.py |
Liste les clubs disponibles |
post_process.py |
Post-traitement des données scrapées |
monitor_scraping.py |
Surveillance en temps réel du scraping |
scrape_all_periods.py |
Scraping complet par périodes |
athlete_summary.py |
Génération de résumés par athlÚte |
đ Performance
Multithreading
Le multithreading est activé par défaut et utilise 4 workers simultanés. Chaque worker utilise son propre driver Selenium pour scraper les pages en parallÚle.
Comparaison de performance:
- Séquentiel: ~14 secondes pour 7 pages
- Multithreading (4 workers): ~8 secondes
- Gain: ~43% plus rapide
Recommandations pour le nombre de workers:
- 2-4 workers: Machines avec 4-8 Go de RAM
- 4-8 workers: Machines avec 8-16 Go de RAM
- 8-16 workers: Machines avec 16+ Go de RAM
Note: Chaque driver Chrome consomme ~200-300 Mo de RAM.
đ Version
v1.2.0 (DerniĂšre mise Ă jour)
- Nouveau: Multithreading pour accélérer le scraping (4 workers par défaut)
- Nouveau: Commande
checkpour détecter le nombre total de pages et de courses - Nouveau: Détection automatique de la pagination et estimation du temps
- Amélioré: Scraping beaucoup plus rapide (4x plus rapide avec multithreading)
- Amélioré: Barre de progression en temps réel avec tqdm
- Nouveau: Options
--multithreadinget--no-multithreading
v1.1.0
- Nouveau: Ajout de la commande
listpour voir les données disponibles - Nouveau: Ajout de la commande
toppour voir les meilleurs athlÚtes - Nouveau: Recherche par club dans les résultats
- Amélioré: Intégration de
config.envpour la configuration - Amélioré: Support de pagination multi-pages pour le calendrier
- Nettoyé: Code optimisé et documenté
â ïž Notes importantes
Fonctionnalités actuelles
â Fonctionne:
- Scraping du calendrier des compétitions (2010-2026)
- Détection automatique de la pagination
- Multithreading pour un scraping 4x plus rapide
- 250+ compétitions récupérées par page
- Scraping des résultats des compétitions
- Recherche d'athlĂštes, clubs et courses
- Analyse et export des données
- Barre de progression en temps réel
â ïž Limitations:
- Le site
monclub.athle.frnécessite une connexion pour accéder aux données des clubs - Les résultats individuels nécessitent un scraping détaillé (option
--fetch-details) - Le multithreading utilise plusieurs drivers Selenium (attention Ă la RAM)
- Le scraping doit ĂȘtre utilisĂ© de maniĂšre responsable (pauses entre les requĂȘtes)
- La structure HTML du site peut changer et nécessiter des mises à jour
Améliorations possibles
- Implémentation de l'authentification pour
monclub.athle.fr - Ajout d'une base de données locale pour des performances accrues
- Interface web pour faciliter l'utilisation
- Support pour la reprise d'un scraping interrompu
- Tests unitaires complets
- Documentation API des modules
đ€ Contribuer
Les contributions sont les bienvenues ! N'hésitez pas à :
- Forker le projet
- Créer une branche pour votre fonctionnalité (
git checkout -b feature/AmazingFeature) - Committer vos changements (
git commit -m 'Add some AmazingFeature') - Pusher vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
đ Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
đ Contact
Pour toute question ou suggestion, n'hésitez pas à :
- Ouvrir une issue sur GitHub
- Contacter le mainteneur du projet
Note importante: Ce scraper doit ĂȘtre utilisĂ© de maniĂšre responsable. Respectez les conditions d'utilisation du site de la FFA et Ă©vitez les requĂȘtes excessives.