spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# picard — Groupe Picard Immobilier2- site: https://picardimmobilier.net/recherche/ (fiches /logement/<secteur>/ref=<id>/)3- méthode: html4- annonces: 34 → 345- couverture après (sur 34 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- Cartes `/recherche/` : titre, secteur, adresse courte, prix ("$1055.00 Par mois"), type ("Chambres 1½"), photo.10- Fiches : adresse complète (avec n° d'unité + code postal), disponibilité ("Disponible immédiatement", "Disponible en septembre 2026"), description, commodités (`div.col-6.text-dark` : "Wifi Illimité", "Emplacement : Étage 3", "Stationnement : Extérieur", "Climatisation", "Chat Accepté", "Meuble Incl. : Semi-Meublé"…), photos S3.11- **lat/lng (nouveau)** : attributs `data-lat`/`data-lng` de la carte Google `#map-custom` — 34/34 géolocalisées.12- Dérivés par finalize() : inclusions (chauffé/éclairé/wifi), balcon, stationnement, étage, furnished (semi-meublé → false), ac.1314## Champs indisponibles à la source15- Superficie : jamais affichée.16- Date de disponibilité précise au jour près (seulement "immédiatement" ou "en <mois> <année>").1718## Fragilités19- Adresse et disponibilité extraites par regex sur le texte aplati de la fiche (pas de balises dédiées) — sensible à un changement de gabarit.20- Le prix des cartes est au format US "$1055.00" ; parsing local conservé (parse_price gérerait aussi).21- Colocations et commercial exclus par filtre sur le titre.2223## Améliorations apportées24- **Cache `self.detail(...)`** : les 34 fiches ne sont re-téléchargées que si la carte liste change (clé = sha1 de titre|prix|adresse|type|photo). Sync passe de ~26 s à ~0,4 s quand rien n'a changé ; plafond `max_details=80` vraies requêtes/sync (exception `_DetailBudget`, hits de cache non comptés).25- Ajout lat/lng structurés (100%).26- Parsing de fiche isolé dans `_parse_detail()` (payload JSON-sérialisable pour le cache).2728## Échantillon avant/après29- Avant : `Appartement | Limoilou | 1055 | 1½ | Disponible immédiatement | lat=None | details={"inclusions": {"internet": true}, "ac": true, ...}`30- Après : idem + `lat=46.8406938, lng=-71.22826` ; description et commodités inchangées (déjà extraites) ; re-sync sans changement = 1 seule requête.3132## Note de normalisation (générique)33- "**Chat Accepté**" (singulier) ne matche ni `_PETS_COND_RE` ni `_PETS_YES_RE` (les motifs exigent "acceptes/admis" au pluriel après "chats?") → pets reste None sur les 34 annonces alors que la source l'affiche. Corriger les regex (accepter le singulier "accepte") dans normalize.py profiterait à toutes les sources.34