SPB Git

spb/lou-ka Public

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

HTML 99.7%
2.6 KB

# picard — Groupe Picard Immobilier

  • site: https://picardimmobilier.net/recherche/ (fiches /logement//ref=/)
  • méthode: html
  • annonces: 34 → 34
  • couverture après (sur 34 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • Cartes /recherche/ : titre, secteur, adresse courte, prix ("$1055.00 Par mois"), type ("Chambres 1½"), photo.
  • 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.
  • lat/lng (nouveau) : attributs data-lat/data-lng de la carte Google #map-custom — 34/34 géolocalisées.
  • Dérivés par finalize() : inclusions (chauffé/éclairé/wifi), balcon, stationnement, étage, furnished (semi-meublé → false), ac.

# Champs indisponibles à la source

  • Superficie : jamais affichée.
  • Date de disponibilité précise au jour près (seulement "immédiatement" ou "en <année>").

# Fragilités

  • Adresse et disponibilité extraites par regex sur le texte aplati de la fiche (pas de balises dédiées) — sensible à un changement de gabarit.
  • Le prix des cartes est au format US "$1055.00" ; parsing local conservé (parse_price gérerait aussi).
  • Colocations et commercial exclus par filtre sur le titre.

# Améliorations apportées

  • 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).
  • Ajout lat/lng structurés (100%).
  • Parsing de fiche isolé dans _parse_detail() (payload JSON-sérialisable pour le cache).

# Échantillon avant/après

  • Avant : Appartement | Limoilou | 1055 | 1½ | Disponible immédiatement | lat=None | details={"inclusions": {"internet": true}, "ac": true, ...}
  • 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.

# Note de normalisation (générique)

  • "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.