# RĂLE
L'objectif est de scraper un site web ouvert sans login. Tu es un développeur expert en Python et Web Scraping, spécialisé dans l'environnement Google Colab et l'API Google Sheets.
# CONTEXTE & OBJECTIF
Je souhaite automatiser la récupération d'annonces de castings depuis le site castprod.com (accessible sans connexion).
Le script doit tourner sur Google Colab, récupérer les annonces via un scraping en 2 étapes, puis les insérer dans une feuille Google Sheets.
# VARIABLES DE CONFIGURATION
- **URL du catalogue d'annonces** : https://castprod.com/
- **URL du Google Sheet** : [INSERER_URL_SHEET_ICI]
- **ID du Google Sheet** : [INSERER_ID_SHEET_ICI]
- **Nom de l'onglet cible (Worksheet)** : [ex: Feuille 1 / Castings]
# LOGIQUE D'EXTRACTION EN 2 ĂTAPES
1. **Ătape 1 : RĂ©cupĂ©ration de la liste des annonces (Page Catalogue)**
- Rends-toi sur la page d'accueil/catalogue (`https://castprod.com/`).
- Analyse la grille d'annonces pour extraire les URLs directes de chaque fiche casting (ex: `https://castprod.com/poste/...`).
2. **Ătape 2 : Extraction du contenu complet (Page Fiche Casting)**
- Pour chaque URL récoltée, visite la page dédiée.
- Extrais l'intégralité du texte descriptif présent dans la page (titre, profil recherché, dates, lieu, rémunération, modalités de candidature/email).
- Nettoie le texte (suppression des espaces superflus et sauts de ligne excessifs).
3. **Ătape 3 : Export vers Google Sheets**
- Remplis la feuille avec les colonnes suivantes :
- Colonne A : Titre de l'annonce
- Colonne B : URL directe de l'annonce
- Colonne C : Texte complet du casting
- Colonne D : Date de récupération (Horodatage)
# SPECIFICATIONS TECHNIQUES & DIRECTIVES (VERSION AGNOSTIQUE)
1. **Scraping HTTP & Parsing HTML Flexible :**
- Utilise `requests` avec un `User-Agent` de navigateur moderne.
- **StratĂ©gie d'extraction de liens (Ătape 1 - Multi-mĂ©thodes) :**
- N'impose PAS de conteneurs HTML stricts (ex: ne pas se limiter à `<article>` ou des classes CSS spéculatives).
- Analyse **tous les liens `<a>`** de la page et filtre-les dynamiquement selon la structure de leur chemin d'URL (ex: détection du pattern de la fiche produit/annonce comme `/poste/`, `/job/`, `/annonce/`, etc.).
- Prévois un **mécanisme de secours (fallback)** : Si une recherche ciblée renvoie 0 résultat, bascule automatiquement sur une recherche globale de liens pertinents.
- Convertis toujours les liens relatifs en URLs absolues (ex: ajouter le nom de domaine si le lien commence par `/`).
- **StratĂ©gie d'extraction de contenu (Ătape 2 - RĂ©siliente) :**
- Pour le titre : Cherche d'abord la balise `<h1>`, puis à défaut `<h2>` ou le `<title>` de la page.
- Pour le texte principal : Cherche les blocs de contenu standards (`<main>`, `<article>`, `.entry-content`, `.content`, ou le `<body>` nettoyé) et extrait les paragraphes (`<p>`, `<ul>`, `<li>`) pour éviter les éléments de menu/footer parasite.
2. **Gestion des erreurs & Robustesse :**
- Utilise des blocs `try/except` pour chaque requĂȘte HTTP et parsing d'annonce.
- Si une page échoue, enregistre l'erreur dans les logs et passe à la suivante sans faire planter le script.
- Ajoute des pauses éthiques (`time.sleep(1)`) entre chaque page.
3. **Integration Google Sheets (Google Colab) :**
- Authentification via `google.colab.auth` et `gspread`.
- **Anti-doublons** : Vérifie l'existence de l'URL dans la colonne correspondante avant d'insérer une nouvelle ligne.
Quel est le bénéfice ?
# LIVRABLES ATTENDUS
Fournis le script Python complet, prĂȘt Ă ĂȘtre exĂ©cutĂ© dans Google Colab, prĂȘt Ă tourner.