spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# lynk_olymbec — Lynk par Olymbec (Lynk De la Savane)2- site: https://www.lynk.ca/lynk-dls/units (+ /floorplans, /floorplans/<plan>, /lynk-dls)3- méthode: firecrawl (repli — accès direct avec en-têtes navigateur quand Cloudflare laisse passer)4- annonces: 4 → 45- couverture après (sur 4 annonces): prix 100%, adresse 100%, dispo 75%, superficie 75%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- /lynk-dls/units : prix marketing « à partir de » par type (repli), icônes10 « dans mon unité » (chauffage — thermostat individuel, électricité, eau11 chaude, climatisation, internet fibre 1,5G, laveuse-sécheuse/lave-vaisselle/12 réfrigérateur/micro-ondes Whirlpool, four et cuisinière, luminaires et13 stores) et liste « aménagements et matériaux » (acoustique, quartz…) —14 SCRAPÉES au lieu de la liste codée en dur — photos RentCafe.15- /lynk-dls/floorplans (RentCafe) — NOUVEAU : attributs STRUCTURÉS16 `data-floorplan-size/sqft/price` par plan -> `area_sqft` (min de la17 fourchette + « Superficie : 657 à 829 pi² » en commodité) et PRIX RÉELS18 (« de 1 650 $ à 2 293 $ par mois » — le marketing affichait 1 700 $ pour le19 3½, RentCafe publie 1 650 $).20- Pages de plan (via `self.detail`, clé = attributs du plan, plafond 1021 vraies requêtes/sync) — NOUVEAU : unités disponibles (« # 923 — Disponible22 maintenant ») -> disponibilité RÉELLE par type + liste des numéros d'unités23 dans la description.24- /lynk-dls : description du projet, « services et commodités » de l'immeuble25 (piscine extérieure chauffée, salle de fitness, concierge, salon vip*,26 stationnement intérieur*, chargeurs VE*…) scrapées, téléphone (lien `tel:`)27 -> `details.contact.phone` (514-737-5965).28- Correspondance plans -> types : Studio→Studio, 1 ch.→3½, 2 ch.→4½, 3 ch.→5½29 (les deux plans 3 chambres agrégés sous 5½).3031## Champs indisponibles à la source32- Studio : aucune unité disponible côté RentCafe (bouton « contactez-nous »33 seulement) -> dispo vide et superficie absente pour ce type (d'où 75 %) ;34 seul le prix marketing 1 380 $ existe.35- lat/lng : aucune coordonnée dans les pages.36- Animaux, meublé : non publiés.3738## Fragilités39- Cloudflare : l'accès direct passe par intermittence ; sinon Firecrawl40 (FIRECRAWL_API_KEY requis). ~4-6 requêtes rendues par sync (pages plan41 amorties par le cache `self.detail`).42- ATTENTION : Firecrawl réécrit les href en ABSOLU alors que l'accès direct43 les laisse RELATIFS -> `urljoin` systématique (c'était la cause d'un échec44 silencieux de l'extraction des unités).45- Chaque plan apparaît 2x dans le HTML (desktop+mobile) : déduplication par46 slug pour ne pas doubler les unités.47- Granularité conservée : 1 annonce par TYPE (ids `dls-studio`, `dls-3.5`…),48 pas par unité — schéma d'external_id inchangé.4950## Améliorations apportées51- SUPPRESSION des valeurs semi-inventées : `availability="Disponible"` codé en52 dur remplacé par la dispo réelle RentCafe (« Disponible maintenant » ou vide53 si inconnue) ; liste AMENITIES codée en dur remplacée par le scraping des54 3 sections réelles du site.55- Prix réels par fourchette RentCafe (structurés), superficie structurée,56 unités disponibles nominatives, contact téléphonique, description réelle.5758## Échantillon avant/après59- Avant : `Lynk De la Savane — 3½ | 1700$ « à partir de 1700 $ » (marketing) |60 dispo « Disponible » (codée en dur) | superficie None | 12 commodités codées61 en dur`62- Après : `Lynk De la Savane — 3½ | 1650$ « de 1 650 $ à 2 293 $ par mois »63 (RentCafe) | dispo « Disponible maintenant » (réelle) | 657 pi² (attribut64 structuré, fourchette 657-829 en commodité) | ~30 commodités scrapées65 (unité + immeuble) | description + « 7 unité(s) disponible(s) : #923, … » |66 contact 514-737-5965`6768## Lacunes génériques de normalisation (à traiter dans normalize.py, pas ici)69- Les items marqués « * » (« salon vip* », « stationnement intérieur* » =70 frais additionnels) sont dérivés sans nuance payant/inclus.71- `price_label` en fourchette « de X $ à Y $ » n'active pas `price_from`72 (le prix affiché est bien le plancher) — `price_is_from` ne reconnaît que73 « à partir de / from / + ».74