Feature: Add club results extractor and course details scraper

- Add get_club_results.py: Extract all results for a club from results CSV
  - Fuzzy search for club names
  - List clubs functionality
  - Export results to CSV
- Add scrape_course_details.py: Scrape detailed info from course pages
  - Extract competition ID (frmcompetition)
  - Extract event details (distance, category, sex)
  - Extract course website link
  - Extract location and organizer info
- Update README.md with new scripts and usage examples
- Update version to v1.3.0
This commit is contained in:
Muyue
2026-01-03 11:03:35 +01:00
parent cbe10fe525
commit 6de44556f4
3 changed files with 823 additions and 2 deletions

114
README.md
View File

@@ -52,7 +52,9 @@ ffa-calendar/
│ ├── 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
── athlete_summary.py # Résumé par athlète
│ ├── get_club_results.py # Extraction des résultats par club
│ └── scrape_course_details.py # Scraping des détails des courses
├── config/ # Fichiers de configuration
│ └── config.env # Configuration du scraper
├── data/ # Données générées
@@ -277,6 +279,61 @@ python scripts/list_clubs.py
python scripts/athlete_summary.py --data-dir data --output athlete_summary.csv
```
#### Extraction des résultats par club
**Récupérer tous les résultats d'un club:**
```bash
python scripts/get_club_results.py --club "Haute Saintonge Athletisme"
```
**Recherche floue (contient le nom):**
```bash
python scripts/get_club_results.py --club "Saintonge" --fuzzy-match
```
**Lister tous les clubs contenant un terme:**
```bash
python scripts/get_club_results.py --list-clubs --search-term "Saintonge"
```
Options:
- `--club`: Nom du club à rechercher
- `--fuzzy-match`: Recherche floue (défaut: True)
- `--exact-match`: Recherche exacte du nom
- `--list-clubs`: Lister tous les clubs disponibles
- `--search-term`: Terme de recherche pour filtrer les clubs
- `--limit`: Limiter le nombre de clubs affichés
- `--output-dir`: Répertoire de sortie pour les exports
Les résultats sont exportés dans `data/exports/` avec un fichier CSV contenant tous les résultats du club.
#### Scraping des détails et épreuves des courses
**Scraper les détails de toutes les courses:**
```bash
python scripts/scrape_course_details.py
```
**Scraper un nombre limité de courses:**
```bash
python scripts/scrape_course_details.py --limit 100
```
**Reprendre le scraping à partir d'un index:**
```bash
python scripts/scrape_course_details.py --start-from 500
```
Ce script génère deux fichiers CSV:
- `data/course_details.csv`: Détails de chaque course (ID, lieu, site web, etc.)
- `data/course_epreuves.csv`: Épreuves de chaque course (distance, catégorie, sexe, participants)
Options:
- `--courses-file`: Fichier CSV des courses (défaut: data/courses_daily.csv)
- `--output-dir`: Répertoire de sortie (défaut: data)
- `--limit`: Limiter le nombre de courses à scraper
- `--start-from`: Index de départ pour reprendre le scraping
### Via les modules Python
```python
@@ -323,6 +380,49 @@ data/
- lien: URL vers la page de la course
- type: Type de course (Cross, Stade, Route, etc.)
- categorie: Catégorie de la compétition
- resultats_url: URL vers la page des résultats
#### 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
#### course_details.csv (généré par scrape_course_details.py)
- course_id: ID unique de la course
- course_url: URL de la page des résultats
- course_nom: Nom de la course
- course_date: Date de la course
- course_lieu: Lieu de la course
- course_lieu_complet: Lieu détaillé
- course_site_web: Lien vers le site web de la course
- competition_id: Numéro de compétition FFA (frmcompetition)
- organisateur: Organisateur de la course
- contact: Informations de contact
- date_heure: Date et heure de la course
- lieu_details: Détails du lieu
- nb_epreuves: Nombre d'épreuves
#### course_epreuves.csv (généré par scrape_course_details.py)
- course_id: ID unique de la course
- epreuve_id: ID unique de l'épreuve
- epreuve_nom: Nom complet de l'épreuve
- epreuve_numero: Numéro de l'épreuve dans la course
- epreuve_distance: Distance (ex: 100m, 10km)
- epreuve_categorie: Catégorie (ex: Seniors, Vétérans)
- epreuve_sexe: Sexe (M/F)
- epreuve_type: Type d'épreuve (Piste, Cross, Trail, Route, Relais)
- participants: Nombre de participants
- url_resultats: URL des résultats
- 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
@@ -353,6 +453,8 @@ data/
| `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 |
| `get_club_results.py` | Extraction des résultats d'un club |
| `scrape_course_details.py` | Scraping des détails et épreuves des courses |
## 🚀 Performance
@@ -374,7 +476,15 @@ Note: Chaque driver Chrome consomme ~200-300 Mo de RAM.
## 📝 Version
### v1.2.0 (Dernière mise à jour)
### v1.3.0 (Dernière mise à jour)
- **Nouveau**: Script `get_club_results.py` pour extraire les résultats d'un club depuis le CSV
- **Nouveau**: Script `scrape_course_details.py` pour récupérer les détails et épreuves des courses
- **Nouveau**: Extraction des numéros de compétition (frmcompetition)
- **Nouveau**: Extraction des épreuves avec distance, catégorie et sexe
- **Nouveau**: Extraction des liens vers les sites web des courses
- **Amélioré**: Recherche flexible de clubs avec correspondance floue
### v1.2.0
- **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