SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.7 KB

# logisco — Logisco

  • site: https://logisco.com/fr/appartements-a-louer (+ pages projets et pages unités)
  • méthode: html
  • annonces: 163 → 161 (2 unités retirées par la source entre les syncs)
  • couverture après (sur 161 annonces): prix 100%, adresse 100%, dispo 100%, superficie 100%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • Cartes projet (.unitCard, comme avant) : titre, adresse, secteur, type d'unité, prix, dispo, services (sr-only), photo de l'unité + photos projet.
  • NOUVEAU — page unité (mise en cache via self.detail, clé = hash du contenu de la carte versionné v2:, plafond 150 vraies requêtes/sync) :
    • JSON-LD @type: apartment : adresse complète STRUCTURÉE avec no d'unité et code postal (« 310-931 Rue de l’École, Lévis, G6W 0T4 »), étage (floorLevel), téléphone du bureau de location -> details.contact.phone, plan de l'unité (image) ajouté aux photos ;
    • sommaire .unitHeader-info : superficie structurée (« 1167 pi² ») -> area_sqft explicite, étage -> details.floor, disponibilité (repli si la carte n'en avait pas) ;
    • 4 sections de commodités : Inclusions (dans le prix), Particularités de l'unité, Services offerts (avec marqueurs « ($) » conservés), Espaces communs — jusqu'à 40 items texte fidèles, dédupliqués avec ceux de la carte.

# Champs indisponibles à la source

  • Animaux : aucune mention sur les pages unités ni projets -> pets = None.
  • Meublé : non exposé.
  • lat/lng : la carte Google des pages unité passe par une URL de recherche (pas de coordonnées dans le HTML).
  • Chauffage/électricité/eau chaude : pas dans les listes d'inclusions type (les inclusions listées sont p. ex. stationnement, climatisation).

# Fragilités

  • 161 unités > plafond de 150 requêtes : au premier sync (ou après un bump de version de clé), les ~11 dernières unités restent sans enrichissement jusqu'au sync suivant (le cache absorbe ensuite tout : régime stable ≈ 0-10 requêtes).
  • Cartes d'unités imbriquées sous des Vue : le helper _text (types=None) reste indispensable.
  • Certaines valeurs JSON-LD contiennent des entités HTML (') : désencodées.
  • Clé de cache versionnée (v2:) : à bumper si l'extraction de la page unité change.

# Améliorations apportées

  • Enrichissement par page unité via self.detail() (aucune visite avant) : adresse complète avec no d'unité + code postal, area_sqft structuré, details.floor, details.contact.phone, plan de l'unité, ~2x plus de commodités (Inclusions/Particularités/Services/Espaces communs vs seulement les icônes sr-only de la carte).
  • Budget de requêtes réelles compté DANS fetch_fn (les hits de cache ne comptent pas), exception _DetailBudget pour ne jamais mettre en cache un payload vide « faute de budget ».

# Échantillon avant/après

  • Avant : L'AMALGAM — Appartement 310 | 1860$ | 4½ | dispo now | 1167 pi² (dérivé du texte de la carte) | adresse « 931 Rue de l’École, Lévis » | details : ac, parking ext.
  • Après : L'AMALGAM — Appartement 310 | 1860$ | 4½ | dispo now | 1167 pi² (structuré) | adresse « 310-931 Rue de l’École, Lévis, G6W 0T4 » | details : ac, ascenseur, balcon/terrasse, rangement, parking int.+ext., étage 3, hookup laveuse-sécheuse, contact 418-564-4726 | 25+ commodités texte

# Lacune générique de normalisation (à traiter dans normalize.py, pas ici)

  • « Entrée lave-vaisselle » (branchement) est classé appliances.dishwasher = true — il faudrait un dishwasher_hookup analogue à washer_dryer_hookup.
  • « Rangement supplémentaire ($) » (payant) donne storage: true sans nuance « en option » ; idem « Stationnement intérieur ($) ».