# boardwalk — Boardwalk REIT (Grand Montréal) - site: https://www.bwalk.com/fr-ca/appartements-a-louer-a-montreal-* (Longueuil, Laval, Île-des-Sœurs/Verdun, Ville Saint-Laurent) - méthode: html (HubSpot CMS rendu serveur) - annonces: 100 → 100 - couverture après (sur 100 annonces): prix 100%, adresse 100%, dispo 100%, superficie 100%, commodités 100% - fixture: ok · test: ok (2 passed) ## Champs extraits - **Page propriété** : - en-tête `p.address-and-phone` → **adresse complète avec code postal** (avant : texte alt d'une photo, sans code postal) + **téléphone** → `details.contact.phone` — nouveau ; - cartes de types de suites (`div.card-properties`) : nom, prix « À partir de », **superficie (pi ca)** (simple, plage « 648 - 760 » ou avec séparateur de milliers « 1 408 »), **c. à c. / sdb** — lus directement sur la carte (avant : regex fragiles sur la page de suite, 0 % de réussite) ; - groupe parent `div.unit_type` : statut réel — « N logement(s) disponible(s) » ou « Sur la liste d'attente » (avant : « Disponible » codé en dur) ; - description (« Description de la propriété » / og:description), commodités (« Caractéristiques et espaces d'agrément » : piscine, sauna, ascenseur, eau/chauffage/électricité, stationnement…), galerie photo hubfs. - **Page de suite** : ne sert plus qu'aux photos spécifiques du type de suite, via `self.detail()` (clé = sha1(url + texte de la carte)) — plus de refetch à chaque sync. ## Champs indisponibles à la source - Animaux : politique non affichée sur les fiches (formulaire seulement). - Meublé, étage, date précise de disponibilité par unité : non exposés (uniquement le nombre de logements disponibles par type). - Pas d'API JSON ni de ld+json : tout est du HTML serveur. ## Fragilités - La superficie de la carte est ambiguë : « Superficie (pi ca) : 1 408 3 c. à c. » mélange séparateur de milliers et nombre de chambres — la regex s'arrête avant « N c. à c. » (testée sur les 4 formats observés). Un nouveau format pourrait la fausser. - Classes HubSpot (`highlight-suite`, `card-properties`, `unit_type`, `address-and-phone`) cassables à la refonte. - Pages lourdes (300-400 Ko) : la fixture fait ~9 Mo pour 24 requêtes ; les photos de suite sont exclues du mode record/replay (via `use_detail_cache`) pour éviter ~100 pages de plus. - Suites « liste d'attente » incluses avec availability = « Sur la liste d'attente » (date normalisée None) — à filtrer côté frontend si non désiré. - `max_properties = 25` : couvre les 17 propriétés actuelles, marge si Boardwalk en ajoute. ## Améliorations apportées - Superficie : 0 % → 100 % (borne basse de la plage en texte brut « N pi ca », dérivée par finalize()). - Adresse avec code postal + téléphone (`details.contact.phone`). - Disponibilité réelle par type de suite (« 2 logement(s) disponible(s) », « Sur la liste d'attente ») au lieu d'un « Disponible » codé en dur. - c. à c. / sdb ajoutés à la description ; suppression des deux regexes cassées sur les pages de suites. - Pages de suites (photos) mises en cache BD via `self.detail()` : sync ~54 s au lieu de ~210 s. ## Échantillon avant/après **Domaine d'Iberville Apartments — 3 1/2 Pièces** (1199 $, 3½) - avant : availability=`Disponible` (codé en dur), area_sqft=None, address=`101-300 Rue Joliette, Montréal - Longueuil` (sans code postal), details sans contact - après : availability=`2 logement(s) disponible(s)`, area_sqft=648, address=`101-300 Rue Joliette, Montréal - Longueuil, J4H 2G5`, details=`{…, "contact": {"phone": "450-679-1330"}}`, description enrichie « Superficie (pi ca) : 648 - 760 — 1 c. à c. — 1 sdb » **Domaine d'Iberville Apartments — 4 1/2 Pièces De luxe** (1789 $, 4½) - avant : availability=`Disponible`, area_sqft=None - après : availability=`Sur la liste d'attente` (statut réel), area_sqft=900