SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.7 KB

# laberge — Gestion immobilière Laberge

  • site: https://www.laberge.qc.ca/recherche
  • méthode: html (page liste rendue serveur + fiches unités)
  • annonces: 54 → 54
  • couverture après (sur 54 annonces): prix 100%, adresse 100%, dispo 100%, superficie 7%, commodités 100%
  • fixture: ok · test: ok (2 passed)

# Champs extraits

  • Page liste (/recherche) : complexe, adresse de la carte, ville (filtre Québec/Lévis/L'Ancienne-Lorette), type d'unité, prix « Débutant », disponibilité, code d'unité (data-href).
  • Fiche unité (via self.detail(), cache BD, max 150 nouveaux fetchs/sync) :
    • bloc structuré h3→p « Grandeur / Étage / Disponibilité / Superficie / Débutant » : area_sqft explicite (structuré à la source), details.floor, dispo de secours ;
    • adresse complète de l'immeuble avec code postal (h3 « Adresse », lien « Autres adresses » retiré) ;
    • secteur (arrondissement) depuis le <title> (Beauport, Sainte-Foy, etc. — 9 secteurs) ;
    • inclusions de l'unité (pictos non grisés : Chauffage/Électricité/Eau chaude, Poêle et réfrigérateur, Lave-vaisselle, Air climatisé…) ;
    • caractéristiques en liste <ul><li> (nouveau) : « Entrée laveuse, sécheuse », « Balcon privé : 72 pi² », « Stationnement extérieur : inclus », hauteur de plafonds, insonorisation… ;
    • services de l'immeuble + dispositifs de sécurité (nouveau) : buanderie, rangement, stationnement intérieur/extérieur, ascenseur, carte d'accès, caméra, intercom, accès mobilité réduite ;
    • description marketing du complexe, photos de l'unité.

# Champs indisponibles à la source

  • Superficie publiée sur ~7 % des unités seulement (immeubles récents comme Le 224) ; idem pour l'étage.
  • Politique animaux / fumeur : jamais mentionnée.
  • Meublé : seulement l'avertissement générique « frais additionnels pour semi-meublés » (pas par unité).
  • Lat/lng du complexe : absent (seuls les POI « À proximité » ont des coordonnées — non utilisés).

# Fragilités

  • Détection des inclusions par pictogrammes : repose sur style="color:#ccc" / suffixe _off. des SVG pour les exclusions.
  • L'adresse des complexes multi-immeubles (Le Charleroi) ne donne que la première adresse ; « Autres adresses » est dans un collapse non extrait.
  • Les lignes du tableau des unités mêlent logements et stationnements/rangements : filtre regex EXCLUDE_UNIT_RE.
  • Le secteur vient du <title> — dépend du format « Appartement - - ».

# Améliorations apportées

  • Fiches unités passées sur self.detail() (cache BD ; auparavant les 54 fiches étaient re-visitées à chaque sync) avec budget max_details=150 (exception _DetailBudget).
  • area_sqft et details.floor extraits du bloc structuré h3→p (auparavant : injectés en texte dans la description).
  • Adresse enrichie du code postal depuis la fiche (avant : adresse de carte sans code postal, parfois liste de 6 numéros civiques).
  • Commodités : ajout des listes <ul><li> de caractéristiques (auparavant ignorées) + services d'immeuble + dispositifs de sécurité → 0 annonce sans commodités (avant : 6) ; details.parking/inclusions dérivés présents sur 54/54.
  • Dédup des libellés, nettoyage des espaces multiples dans les <li>.

# Échantillon avant/après

Le 224 — 3½ (#1-0614) (1490 $, dispo now, 742 pi²)

  • avant : address=224, rue seigneuriale, amenities=6 pictos, details={"inclusions":{"hot_water":true},"appliances":{"fridge":true,"dishwasher":true,"washer_dryer_hookup":true},"ac":true,"floor":6}
  • après : address=224 rue seigneuriale, Québec, G1E 0M8, amenities=29 items (quartz, insonorisation, stationnements, sécurité…), details={"inclusions":{"heating":false,"hot_water":true},"appliances":{fridge,stove,dishwasher,washer_dryer_hookup},"ac":true,"elevator":true,"balcony":true,"storage":true,"parking":{"available":true,…},"floor":6} + area_sqft=742 structuré

Le 2910 Canardière — 4½ (#2910-34) (1090 $, Septembre 2026)

  • avant : details={"inclusions":{"heating":true,"hot_water":true}}, address sans code postal
  • après : details={"inclusions":{"heating":true,"hot_water":true},"appliances":{"washer_dryer_hookup":true},"balcony":true,"laundry":true,"storage":true,"parking":{"available":true,"type":"extérieur"}}, address=2910 boulevard Mgr Gauthier, Québec, G1E 2V2

# Lacune générique de normalisation détectée

  • normalize.py : le motif négatif de heating (non chauffe) matche « Stationnement intérieur non chauffé : des frais… » → inclusions.heating=false erroné pour Le 224 alors que seul le stationnement est non chauffé. Le motif devrait exclure le contexte « stationnement/garage ».