Muyue cbe10fe525 📚 Docs: Add resume script documentation
- 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
2026-01-02 15:52:09 +01:00
2026-01-02 15:52:09 +01:00

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

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

  1. Cloner le dépÎt
git clone https://github.com/votre-username/ffa-calendar.git
cd ffa-calendar
  1. Créer un environnement virtuel (recommandé)
python -m venv venv
source venv/bin/activate  # Linux/Mac
# ou
venv\Scripts\activate     # Windows
  1. Installer les dépendances
pip install -r requirements.txt
  1. 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Ă©titions
  • RESULTS_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 check pour 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 --multithreading et --no-multithreading

v1.1.0

  • Nouveau: Ajout de la commande list pour voir les donnĂ©es disponibles
  • Nouveau: Ajout de la commande top pour voir les meilleurs athlĂštes
  • Nouveau: Recherche par club dans les rĂ©sultats
  • AmĂ©liorĂ©: IntĂ©gration de config.env pour 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.fr nĂ©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 à:

  1. Forker le projet
  2. Créer une branche pour votre fonctionnalité (git checkout -b feature/AmazingFeature)
  3. Committer vos changements (git commit -m 'Add some AmazingFeature')
  4. Pusher vers la branche (git push origin feature/AmazingFeature)
  5. 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.

Description
No description provided
Readme MIT 132 KiB
Languages
Python 100%