SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.9 KB

# contraste — Contraste Immobilier

  • site: https://contrasteimmobilier.ca (accueil → pages immeubles /appartements//)
  • méthode: html
  • annonces: 231 → 231
  • couverture après (sur 231 annonces): prix 85%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • title, unit_type, price/price_label, availability, images : attributs data-* des cartes div.building-stack-unit (plugin « api-building-stack ») sur la page immeuble.
  • address : titre Elementor complet (« 4855 rue de L'Escarpement, Québec, Québec, G3K0N8 »), avec repli sur l'adresse courte du hero des pages « projet » (« 2784 ave Sasseville » pour Ellipse / Émergence II, qui n'affichent pas de ville). sector dérivé de l'adresse ; city via infer_city + carte d'accueil.
  • amenities : NOUVEAU — liste CARACTÉRISTIQUES de l'immeuble (répéteur JetEngine .jet-listing-dynamic-repeater__item span) : inclusions, animaux, stationnement, électroménagers… + type de bâtiment data-housing-type (« Maison de ville ») quand présent.
  • details.contact : NOUVEAU — courriel/téléphone « Pour prendre rendez-vous » exposés dans les titres Elementor de la page immeuble (structuré, pas déduit du texte).
  • description : meta og:description (texte complet du projet).
  • area_sqft : lu depuis data-size mais uniquement si plausible (80–20 000) — chez Contraste l'attribut vaut toujours « 0 », donc None aujourd'hui ; l'extraction s'activera d'elle-même si le gestionnaire remplit le champ.

# Champs indisponibles à la source

  • Superficie : data-size="0" partout, aucune mention en pi² dans les pages.
  • Prix des immeubles Focus I/II : data-price="0" (la carte n'affiche aucun prix) — 34 unités restent volontairement sans prix (avant, elles portaient un faux « 0$/mois »).
  • Étage, meublé, lat/lng : non exposés.
  • animaux : seulement en texte libre (« Chats autorisés, certaines conditions s'appliquent »).

# Fragilités

  • Dépend du plugin WordPress « api-building-stack » (attributs data-pid/data-name/data-rooms/ data-price) : un changement de thème casserait le parsing.
  • La liste des immeubles vient des cartes de la page d'accueil (a[href*="/appartements/"]).
  • Filtre géographique par ville de la carte d'accueil (Beaupré exclue) — si la carte omet la ville, l'immeuble passe avec défaut « Québec ».
  • LACUNES GÉNÉRIQUES de normalisation constatées ici (non contournées localement) :
    1. « Non chauffé et éclairé » → inclusions.heating=true (faux positif : le motif positif chauffe matche « chauffé et » ; « non chauffé » n'est pas un motif négatif reconnu — « Non chauffé, non éclairé » passe par chance à cause de la virgule).
    2. « Chats autorisés (…sous conditions) » n'est reconnu par aucun motif pets → pets reste None alors que la source l'affiche (devrait donner « conditions »).
    3. « Électroménagers selon disponibilités ($) » / « sur demande ($) » → appliances.fridge=true (les électroménagers ne sont pas inclus, ils sont en option payante).

# Améliorations apportées

  • Extraction des commodités d'immeuble (CARACTÉRISTIQUES) → amenities pour chaque unité (avant : amenities toujours vide, 231/231).
  • Adresse de repli pour les pages « projet » (Ellipse, Émergence II) → 100 annonces qui n'avaient aucune adresse en ont maintenant une.
  • data-price="0" traité comme « prix non affiché » (avant : price_label « 0$/mois » inventé).
  • details.contact (email + téléphone location) quand la page l'affiche.
  • data-housing-type ajouté aux amenities ; data-size branché (inactif tant que la source le laisse à 0).

# Échantillon avant/après

Agora Phase 2 — unité 206

  • avant : 1519.0 | 4½ | Bientôt disponible (01 décembre 2026) | 2026-12-01 | area=None | pets=None | details={"floor": 2} | 4855 rue de L'Escarpement, Québec, Québec, G3K0N8 | amenities=[]
  • après : 1519.0 | 4½ | Bientôt disponible (01 décembre 2026) | 2026-12-01 | area=None | pets=None | details={"inclusions":{"heating":true,"internet":true},"appliances":{"fridge":true,"washer_dryer_hookup":true},"ac":true,"parking":{"available":true,"type":"extérieur"},"floor":2,…} | même adresse | amenities=[Non chauffé et éclairé, Entrée laveuse-sécheuse, Internet inclus, Air climatisé, Chats autorisés sous conditions, Électroménagers sur demande($), Stationnement extérieur ($)]

ELLIPSE — unité 101

  • avant : prix ok | 4½ | Disponible | now | address="" | details={}
  • après : prix ok | 4½ | Disponible | now | address="2784 ave Sasseville" | details={"inclusions":{"heating":true,"electricity":true,"hot_water":true,"internet":true},"appliances":{"fridge":true,"stove":true},"ac":true,"gym":true,"parking":{"available":true,"type":"intérieur"},"contact":{"email":"location@contrasteimmobilier.ca","phone":"418-520-4412"}}