spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# logisco — Logisco2- site: https://logisco.com/fr/appartements-a-louer (+ pages projets et pages unités)3- méthode: html4- annonces: 163 → 161 (2 unités retirées par la source entre les syncs)5- couverture après (sur 161 annonces): prix 100%, adresse 100%, dispo 100%, superficie 100%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- Cartes projet (.unitCard, comme avant) : titre, adresse, secteur, type10 d'unité, prix, dispo, services (sr-only), photo de l'unité + photos projet.11- NOUVEAU — page unité (mise en cache via `self.detail`, clé = hash du contenu12 de la carte versionné `v2:`, plafond 150 vraies requêtes/sync) :13 - JSON-LD `@type: apartment` : adresse complète STRUCTURÉE avec no d'unité14 et code postal (« 310-931 Rue de l’École, Lévis, G6W 0T4 »), étage15 (`floorLevel`), téléphone du bureau de location -> `details.contact.phone`,16 plan de l'unité (image) ajouté aux photos ;17 - sommaire `.unitHeader-info` : superficie structurée (« 1167 pi² ») ->18 `area_sqft` explicite, étage -> `details.floor`, disponibilité (repli si la19 carte n'en avait pas) ;20 - 4 sections de commodités : Inclusions (dans le prix), Particularités de21 l'unité, Services offerts (avec marqueurs « ($) » conservés), Espaces22 communs — jusqu'à 40 items texte fidèles, dédupliqués avec ceux de la carte.2324## Champs indisponibles à la source25- Animaux : aucune mention sur les pages unités ni projets -> `pets = None`.26- Meublé : non exposé.27- lat/lng : la carte Google des pages unité passe par une URL de recherche28 (pas de coordonnées dans le HTML).29- Chauffage/électricité/eau chaude : pas dans les listes d'inclusions type30 (les inclusions listées sont p. ex. stationnement, climatisation).3132## Fragilités33- 161 unités > plafond de 150 requêtes : au premier sync (ou après un bump de34 version de clé), les ~11 dernières unités restent sans enrichissement jusqu'au35 sync suivant (le cache absorbe ensuite tout : régime stable ≈ 0-10 requêtes).36- Cartes d'unités imbriquées sous des <template> Vue : le helper `_text`37 (types=None) reste indispensable.38- Certaines valeurs JSON-LD contiennent des entités HTML (') : désencodées.39- Clé de cache versionnée (`v2:`) : à bumper si l'extraction de la page unité40 change.4142## Améliorations apportées43- Enrichissement par page unité via `self.detail()` (aucune visite avant) :44 adresse complète avec no d'unité + code postal, `area_sqft` structuré,45 `details.floor`, `details.contact.phone`, plan de l'unité, ~2x plus de46 commodités (Inclusions/Particularités/Services/Espaces communs vs seulement47 les icônes sr-only de la carte).48- Budget de requêtes réelles compté DANS `fetch_fn` (les hits de cache ne49 comptent pas), exception `_DetailBudget` pour ne jamais mettre en cache un50 payload vide « faute de budget ».5152## Échantillon avant/après53- Avant : `L'AMALGAM — Appartement 310 | 1860$ | 4½ | dispo now | 1167 pi²54 (dérivé du texte de la carte) | adresse « 931 Rue de l’École, Lévis » |55 details : ac, parking ext.`56- Après : `L'AMALGAM — Appartement 310 | 1860$ | 4½ | dispo now | 1167 pi²57 (structuré) | adresse « 310-931 Rue de l’École, Lévis, G6W 0T4 » | details :58 ac, ascenseur, balcon/terrasse, rangement, parking int.+ext., étage 3,59 hookup laveuse-sécheuse, contact 418-564-4726 | 25+ commodités texte`6061## Lacune générique de normalisation (à traiter dans normalize.py, pas ici)62- « Entrée lave-vaisselle » (branchement) est classé `appliances.dishwasher =63 true` — il faudrait un `dishwasher_hookup` analogue à `washer_dryer_hookup`.64- « Rangement supplémentaire ($) » (payant) donne `storage: true` sans nuance65 « en option » ; idem « Stationnement intérieur ($) ».66