SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.2 KB

# plan_a — Plan A Immobilier

  • site: https://plan-a.ca/plan-a-appartements-et-condos-a-louer/ (fiches /project//)
  • méthode: html
  • annonces: 9 → 9 (granularité = 1 annonce par complexe, prix plancher ; projets Saguenay/Sherbrooke exclus)
  • couverture après (sur 9 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • Cartes-projets : JSON data-filters-item (ville, budget-min), adresse, prix "À partir de", types, disponibilité, carrousel d'images (inchangé).
  • Fiches projets :
    • Commodités des unités (nouveau) : section .c-feature ("Comptoir de quartz", "Électroménagers (5) inclus", "Thermopompe murale", "Balcon privé", "Un animal de 10 livres et moins est permis"…).
    • Services de l'immeuble (nouveau) : liste à puces sous "SERVICES DANS L'IMMEUBLE" ("Ascenseurs", "Stationnements intérieurs ($)", "Espaces de rangements ($)"…).
    • Atouts (nouveau) : titres du carrousel .c-cell_title h4 ("Centre fitness", "Piscine"…).
    • Types d'unités complets (.c-info_unit : 3½/4½/5½), description (og:description), disponibilité "Prochaine disponibilité + x/y unités", quartier (section QUARTIER).
    • Galerie (nouveau) : photos wp-content de la fiche ajoutées aux images de la carte (cap 20).
  • Dérivés par finalize() : ascenseur, balcon, piscine, gym, rangement, ac (thermopompe), stationnement intérieur/extérieur, lave-vaisselle, entrée laveuse-sécheuse, price_from.

# Champs indisponibles à la source

  • Superficie : non affichée (ni par projet ni par type).
  • Prix/dispo par unité : la page publique n'expose que le prix plancher et le compte d'unités disponibles ; pas d'API des unités individuelles (vérifié : pas de wp-json custom, pas d'iframe de disponibilités).
  • lat/lng : non exposés (seulement un lien google.com/maps?q=).
  • pets structuré : seulement en texte libre ("Un animal de 10 livres et moins est permis").

# Fragilités

  • Disponibilité extraite par regex sur le texte aplati ("Prochaine disponibilité … Unités").
  • Thème sur mesure (classes c-card/c-feature/c-cell) — refonte graphique = maintenance.
  • La liste des sous-titres de carte sert à la fois d'adresse et de prix (ordre positionnel).

# Améliorations apportées

  • Cache self.detail(...) : les 9 fiches projets ne sont re-téléchargées que si la carte change (clé = sha1 de prix|dispo|types|adresse) ; sync sans changement : 25 s → 2,4 s ; plafond max_details=20 vraies requêtes (compteur dans fetch_fn).
  • Commodités : de 0% à 100% (3 sections extraites), d'où des details riches (avant : quasi vides).
  • Types d'unités complets depuis la fiche, galerie enrichie.
  • 2026-08-08 — Expansion provinciale (lot 0) : sherbrooke ajouté à ALLOWED_CITIES. +1 annonce : Complexe du Parc (85 Rue Bowen N, Sherbrooke — 1½ à 4½, à partir de 590 $/mois, 29/196 unités disponibles). Saguenay (District Jonquière, disponible sur le site) reste exclu — prévu au lot Est & Nord du plan d'expansion. 9 → 10 annonces. Fixture réenregistrée, 2 tests verts.

# Échantillon avant/après

  • Avant : ELORA | 1720 | 3½ | Disponible maintenant (79 / 185 unités) | amenities=[] | details={"price_from": true}
  • Après : ELORA | 1720 | 3½ | Disponible maintenant (79 / 185 unités) | amenities=["Comptoir de quartz et dosseret de quartz", "Électroménagers (5) inclus dans toutes les unités", …, "Ascenseurs", "Stationnements intérieurs ($)"] | details={"appliances": {"fridge": true}, "ac": true, "elevator": true, "balcony": true, "gym": true, "storage": true, "parking": {"available": true, "type": "intérieur"}, "price_from": true}

# Notes de normalisation (génériques)

  • "Un animal de 10 livres et moins est permis" (singulier "animal") ne matche aucun motif pets (_PETS_*_RE n'acceptent que "animaux/chats/chiens") → pets=None alors que la source l'affiche. Ajouter le singulier "animal … permis" profiterait à toutes les sources.
  • unit_type du schéma est mono-valeur : "3½, 4½, 5½" est réduit à "3½" par normalize_unit_type — cohérent avec le prix plancher, mais l'éventail des types du complexe est perdu (visible seulement dans la fixture/le titre).