# rentalys — Rentalys (Gestion locative, Grand Montréal) - site: https://location.rentalys.ca/property/ (archives Houzez paginées) - méthode: html - annonces: 10 → 10 - couverture après (sur 10 annonces): prix 100%, adresse 100%, dispo 100%, superficie 80%, commodités 100% - fixture: ok · test: ok ## Champs extraits - Archive : titre, adresse Houzez (`, Canada` retiré), prix `$X,XXX/mois`, étiquettes (« Disponible au 1er Juillet » → availability ; autres → amenities), lits/bains/pi² (item-amenities), ville/secteur (mapping arrondissements MTL vs banlieues), vignette. - Fiche : galerie complète wp-content (sans miniatures/logos), description bilingue (900 car. — inclut téléphone → `details.contact.phone` dérivé par finalize()). - **NOUVEAU — superficie structurée** : bloc « Caractéristiques clés » Houzez (libellé `.h-area`) → `area_sqft` explicite. - **NOUVEAU — lat/lng structurés** : variable JS `houzez_single_property_map` (JSON) → `lat`/`lng` (validés dans l'enveloppe géographique du Québec). Couverture 100 %. ## Champs indisponibles à la source - `pets`/`furnished` structurés (dérivés du texte par finalize() : « entièrement meublé », « pas d'animaux »…). - Étage, inclusions détaillées en champs dédiés (texte libre de la description seulement). - Superficie absente de 2 fiches sur 10 (non publiée à la source). ## Fragilités - Thème Houzez : sélecteurs `.item-listing-wrap`, `.h-area`, `houzez_single_property_map` — stables mais liés au thème. - L'unité de la superficie n'est pas affichée à la source (nombre seul, icône règle) : pi² supposés (cohérent avec les valeurs 600–1200 observées). - Déduplication ville/secteur basée sur des listes statiques d'arrondissements. ## Améliorations apportées - Fiches déplacées derrière `self.detail(...)` (cache BD, clé = hash titre+prix+dispo+étiquettes) + plafond `max_details=60` vraies requêtes/sync (`_BudgetReached`, rien de mis en cache au-delà). - `area_sqft` structuré depuis `.h-area` (fiabilise les 8 déjà dérivés du texte). - `lat`/`lng` extraits du JSON de la carte Houzez (0 % → 100 %). - Description passée de 600 à 900 caractères (couvre les « Options » : stationnement 100 $/mois → `details.parking.price` dérivé, et le téléphone → contact). ## Échantillon avant/après - AVANT : `VERDUN – 4 1/2 dans bâtisse récente | 2177 | 4½ | dispo="Disponible au 1er Juillet" | area 790 (dérivée du texte) | lat NULL` - APRÈS : `VERDUN – 4 1/2 dans bâtisse récente | 2177 | 4½ | idem | area 790 (structurée) | lat 45.45176, lng -73.56852 | details.parking={extérieur, 100$}` - APRÈS : `VERDUN – 4 1/2 en demi sous-sol | pets="non" (dérivé description) | lat/lng présents`