SPB Git

spb/lou-ka Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

HTML 99.7%
3.9 KB

# 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-phoneadresse complète avec code postal (avant : texte alt d'une photo, sans code postal) + téléphonedetails.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