# sentinelle — La Sentinelle (Groupe Brochu, Lévis) - site: https://lasentinellelevis.com/projet/ - méthode: html - annonces: 10 → 10 - couverture après (sur 10 annonces): prix 100%, adresse 100%, dispo 100%, superficie 100%, commodités 100% - fixture: ok · test: ok ## Champs extraits - **NOUVEAU — tableau structuré de /projet/** (`tr[data-url*='/unite-']`) : numéro d'unité, étage, superficie (pi²), type (« 4½+ »), prix (« 1695$ »), statut (Disponible/Loué/Réservé). Le statut filtre AVANT toute requête : les fiches des unités louées ne sont plus téléchargées. - Champs désormais **structurés à la source** : `price` + `price_label` (colonne prix), `area_sqft` (colonne superficie), `details.floor` (colonne étage), `unit_type` (colonne type ; « + » → « Avec espace bureau » en description). - Fiche d'unité (via `self.detail(...)`, clé = ligne du tableau) : « Disponible à partir de : … » (availability datée), commodités depuis la vraie liste à puces `ul.uk-list-disc` (au lieu d'une liste de candidats codée en dur), photos/plans wp-content. - `details.contact.phone` (lien `tel:` du pied de page — bureau de location de l'immeuble), code postal G6V 0C1 ajouté à l'adresse. ## Champs indisponibles à la source - Animaux, meublé, lat/lng (rien de publié). - Courriel (obfusqué par Cloudflare : « [email protected] »). - Inclusions chauffage/électricité (seule « Eau chaude fournie » est affichée). ## Fragilités - Le tableau contient une colonne commentée (``) : les cellules sont reconnues par motif (statut/prix/étage/type/pi²), pas par position — robuste à une réactivation de colonne. - Repli conservé : si le tableau disparaît, balayage des liens `/projet/etage-N/unite-NNN/` comme avant (avec les mêmes extractions fiche). - « Ascenceur » (coquille de la source) n'est pas reconnu par le normaliseur d'ascenseur — voir lacunes génériques. ## Améliorations apportées - Parsing du tableau structuré (prix/superficie/étage/type/statut explicites, plus dérivés du texte). - Fiches derrière `self.detail(...)` (cache BD) + plafond `max_details=60` (`_BudgetReached`) ; unités non disponibles filtrées sans requête. - Commodités extraites structurellement (`ul.uk-list-disc`) — n'importe quelle nouvelle commodité de la source sera reprise. - `details.floor`, `details.contact.phone`, code postal. - Fixture (11 requêtes) + tests ok. ## Échantillon avant/après - AVANT : `Unité 104 (4½) | 1695 | dispo "Disponible à partir de : Maintenant" | area 1241 (regex texte) | details={hot_water, ac, storage, parking}` - APRÈS : `Unité 104 (4½) | 1695 (structuré) | idem | area 1241 (structuré) | details={hot_water, ac, storage, parking:{intérieur, inclus}, floor:1, contact.phone:418-741-3737}`