SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.0 KB

# halfred — Halfred (Outaouais : Gatineau, Chelsea, Saint-Jérôme)

  • site: https://www.halfred.ca/listings (redirige vers /listings/list)
  • méthode: html rendu côté serveur (React Router SSR) + fiches /details via self.detail() (cache BD)
  • annonces: 165 (une par immeuble/projet affiché — 163 à Gatineau, 1 Chelsea, 1 Saint-Jérôme)
  • couverture (sur 165 annonces): prix 100 %, dispo 100 %, superficie 98 %, adresse 93 %, secteur 55 %, images 99 %, description 95 %
  • fixture: ok (15 requêtes) · test: ok (2 verts)

# Champs extraits

  • Cartes de la liste (a[href^='/listings/'][href$='/details']), tout est structuré par icône lucide : bed-double (chambres), bath (salles de bain), ruler (superficie), calendar (disponibilité), map-pin (ville + secteur), plus le bloc prix.
  • external_id stable = slug de l'URL (17-rue-de-liverpool) ou project-<uuid> pour les 4 projets locatifs (Desrosiers, Chelsea Creek, Nuvo, PURE).
  • Ville/secteur : le site publie « Gatineau (Plateau) », « Buckingham (Buckingham) », « Chelsea »… → ville = Gatineau pour toutes les anciennes villes fusionnées (Hull, Aylmer, Buckingham, Angers, Templeton, Touraine, Pointe-Gatineau, Vieux-Gatineau), secteur = le libellé de la source. Les secteurs bruités (« Gatineau (1) », « Gatineau (Québec) ») sont écartés au lieu d'être inventés.
  • Prix : <b>1650$</b> + libellé « À partir de … par mois ». Quand une promotion est affichée, l'ancien prix barré est conservé en texte dans la description (« Prix régulier 1800 $ ») — jamais utilisé comme prix.
  • Type d'unité : borne BASSE de la fourchette (« studio - 1 chambres » → Studio, « 1 - 2 chambres » → 3½), cohérente avec le prix « à partir de » de la même carte ; idem pour la superficie (« 1200 - 1260 pieds carrés » → 1 200 pi²).
  • Disponibilité : « Disponible maintenant » ou « Disponible le 1 septembre 2026 » → date ISO par la normalisation commune.
  • Fiche /details (cache BD, plafond max_details=12 par sync) : description longue rédigée par l'agence (inclusions, conditions animaux/fumeur — exploitée par textmine), galerie de photos (/storage/v1/render/image/...), details.contact (courriel + téléphone du bureau) et details.walk_score / details.bike_score publiés par le site.
  • Badges de la carte (PROMO, Dernières unités) repris tels quels dans la description.

# Champs indisponibles à la source

  • Adresse civique des 4 projets (cartes portant un nom commercial) : non publiée → address vide (la ville/le secteur restent renseignés).
  • lat/lng, animaux et meublé : non exposés structurellement (textmine les déduit de la description quand l'agence les écrit).
  • Commodités structurées : aucune liste dédiée sur le site (tout est en prose dans la description).

# Fragilités

  • robots.txt : Crawl-delay: 10request_delay = 10.0. Une sync = 1 requête liste + jusqu'à 12 fiches ⇒ ~2,5 min. Le cache BD self.detail() (clé = contenu de la carte) fait que les fiches ne sont revisitées qu'après changement ; la couverture des descriptions s'étend à chaque sync.
  • Le serveur ne déclare pas de charset (Content-Type: text/html) : resp.encoding = "utf-8" est forcé, sinon tous les accents sont mojibake.
  • Site bilingue : en-tête Accept-Language: fr-CA obligatoire (sinon « 2 bedrooms / Available Now »).
  • Les classes CSS sont générées (Tailwind) : le parsing s'appuie sur les attributs stables data-sentry-component et icon-lucide-*, pas sur la présentation.

# Échantillon

  • halfred:17-rue-de-liverpool | 17 Rue De Liverpool | Gatineau / Plateau | 4½ | À partir de 1650$ par mois → 1 650 $ | Disponible maintenant → now | 1 200 pi² | 5 photos | description 1 148 car. | contact 819-593-3304
  • halfred:project-63a3366d-… | Nuvo | Gatineau | 3½ | À partir de 1295$ par mois | 1 104 pi²
  • halfred:178-chemin-de-la-savane | Gatineau / Pointe-Gatineau | 4½ | 1156 $ | Disponible le 17 octobre 2026 → 2026-10-17