- Créer une arborescence propre (src/, scripts/, config/, data/, docs/, tests/) - Déplacer les modules Python dans src/ - Déplacer les scripts autonomes dans scripts/ - Nettoyer les fichiers temporaires et __pycache__ - Mettre à jour le README.md avec documentation complète - Mettre à jour les imports dans les scripts pour la nouvelle structure - Configurer le .gitignore pour ignorer les données et logs - Organiser les données dans data/ (courses, resultats, clubs, exports) Structure du projet: - src/: Modules principaux (ffa_scraper, ffa_analyzer) - scripts/: Scripts CLI et utilitaires - config/: Configuration (config.env) - data/: Données générées - docs/: Documentation - tests/: Tests unitaires 💘 Generated with Crush Assisted-by: GLM-4.7 via Crush <crush@charm.land>
73 lines
2.9 KiB
Python
Executable File
73 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Script de surveillance du scraping FFA
|
|
"""
|
|
|
|
import time
|
|
import pandas as pd
|
|
from pathlib import Path
|
|
|
|
def monitor_scraping(data_dir="data_2024_2025"):
|
|
"""Surveiller le scraping et afficher les statistiques"""
|
|
|
|
results_file = Path(data_dir) / "resultats" / "results.csv"
|
|
courses_file = Path(data_dir) / "courses" / "courses_list.csv"
|
|
|
|
while True:
|
|
print("\n" + "="*60)
|
|
print(f"📊 Surveillance du scraping - {time.strftime('%H:%M:%S')}")
|
|
print("="*60)
|
|
|
|
# Statistiques des courses
|
|
if courses_file.exists():
|
|
courses_df = pd.read_csv(courses_file)
|
|
print(f"📅 Courses disponibles: {len(courses_df)}")
|
|
|
|
# Statistiques des résultats
|
|
if results_file.exists():
|
|
results_df = pd.read_csv(results_file)
|
|
print(f"🏃 Résultats récupérés: {len(results_df)}")
|
|
print(f"💾 Taille fichier: {results_file.stat().st_size / (1024*1024):.2f} Mo")
|
|
|
|
# Recherche Augustin ROUX
|
|
augustin_mask = (
|
|
results_df['nom'].str.contains('ROUX', case=False, na=False) &
|
|
results_df['prenom'].str.contains('Augustin', case=False, na=False)
|
|
)
|
|
augustin_results = results_df[augustin_mask]
|
|
|
|
print(f"\n🎯 Recherche: Augustin ROUX")
|
|
print(f" Résultats trouvés: {len(augustin_results)}")
|
|
|
|
if len(augustin_results) > 0:
|
|
print(f"\n Détails des résultats:")
|
|
for idx, row in augustin_results.iterrows():
|
|
print(f" - Place {row['place']}: {row['resultat']} ({row['date'] if 'date' in row else 'N/A'})")
|
|
if 'club' in row and pd.notna(row['club']):
|
|
print(f" Club: {row['club']}")
|
|
|
|
# Top 5 clubs par nombre de résultats
|
|
print(f"\n🏟️ Top 5 clubs par nombre de résultats:")
|
|
top_clubs = results_df['club'].value_counts().head(5)
|
|
for club, count in top_clubs.items():
|
|
print(f" - {club}: {count} résultats")
|
|
|
|
# Recherche clubs Charente-Maritime (17)
|
|
print(f"\n📍 Clubs Charente-Maritime (17):")
|
|
dept17_mask = results_df['club'].str.contains(r'[\( ]17[\) ]', na=False)
|
|
dept17_results = results_df[dept17_mask]
|
|
dept17_clubs = dept17_results['club'].unique() if len(dept17_results) > 0 else []
|
|
|
|
if len(dept17_clubs) > 0:
|
|
for club in dept17_clubs[:10]:
|
|
count = len(results_df[results_df['club'] == club])
|
|
print(f" - {club}: {count} résultats")
|
|
else:
|
|
print(f" Aucun résultat trouvé pour le département 17")
|
|
|
|
print("\n⏳ Prochaine vérification dans 60 secondes...")
|
|
time.sleep(60)
|
|
|
|
if __name__ == "__main__":
|
|
monitor_scraping()
|