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.
- en-tête
- 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