# gimcote — GIM Côté inc. - site: https://gimcote.com/property-type/appartement/ - méthode: html - annonces: 85 → 85 - couverture après (sur 85 annonces): prix 100%, adresse 100%, dispo 100%, superficie 2%, commodités 100% - fixture: ok · test: ok ## Champs extraits - Carte liste (Houzez) : titre, adresse Nominatim (rue + secteur), statut (« Disponible dès maintenant »), type d'unité (titre puis étiquette /label/), prix (virgule = milliers), amenities de la carte, galerie complète (`data-images`, URLs pleine taille). - Fiche détail (nouveau, via `self.detail` + cache BD) : - description complète `#property-description-wrap` (1200 c. — inclut le téléphone → `details.contact.phone` dérivé par finalize) ; - caractéristiques `#property-features-wrap` fusionnées aux amenities de la carte ; - bloc « Détails » structuré (`strong`/`span`) : **Animaux** (→ `pets` : « Chat opéré » → conditions, « Non » → non), **Meublé** (→ `furnished` bool), **Fumeur** (→ `details.smoking`), **Stationnement** (→ `details.parking.available`) ; - **lat/lng** depuis le JSON de la carte Houzez (`"lat":"46.81…","lng":"-71.25…"`) — 85/85. ## Champs indisponibles à la source - Superficie : quasi jamais publiée (2/85 via mention texte dans la description). - Date précise de disponibilité : uniquement le statut « Disponible dès maintenant » / « Loué » (les loués sont exclus). - « Chambre à couchée » / « Salle de bain » / « Étage(s) » exposés mais sans clé canonique `details` (Étage(s) ambigu : étage de l'unité vs nombre d'étages — non retenu). ## Fragilités - Thème Houzez : sélecteurs `#property-detail-wrap li strong/span`, `data-images` — sensibles à un changement de thème. - lat/lng extraits par regex du JSON embarqué de la carte — fragile si Houzez renomme les clés. - L'adresse Nominatim est verbeuse ; le découpage par virgules reste heuristique. ## Améliorations apportées - Ajout des fiches détail avec **cache BD** (`self.detail`, clé = hash de la carte) + budget 150 vraies requêtes (compteur, exception au-delà → pas de cache pollué). - Description 0 → 85/85 ; `pets` 0 → 85/85 ; `furnished` 0 → 85/85 renseigné (bool) ; `details.smoking`/`parking` structurés ; lat/lng 0 → 85/85 ; contact téléphone dérivé. ## Échantillon avant/après - Avant : « Beau studio 1 1/2, St-Roch, WIFI Libre » — 615 $, dispo now, description vide, pets NULL, details {internet, parking}. - Après : même annonce — pets=non, furnished=oui, smoking=non, lat/lng 46.8171/-71.2568, description complète, inclusions {heating, electricity, hot_water, internet}. - Après : « Superbe 4 1/2, rue Pie-X Lévis » — pets=conditions (« Chat opéré »), contact.phone 418-655-8281, lat/lng remplis. ## Lacunes génériques de normalisation observées - `_PARKING_EXTRA_RE` capture parfois « 0 $ » dans la description → `parking.price: 0.0` peu utile.