SPB Git

spb/lou-ka Public

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

HTML 99.7%
4.0 KB · 33 lines markdown
Rendered Raw Blame History
1# halfred — Halfred (Outaouais : Gatineau, Chelsea, Saint-Jérôme)2- site: https://www.halfred.ca/listings (redirige vers /listings/list)3- méthode: html rendu côté serveur (React Router SSR) + fiches /details via `self.detail()` (cache BD)4- annonces: 165 (une par immeuble/projet affiché — 163 à Gatineau, 1 Chelsea, 1 Saint-Jérôme)5- couverture (sur 165 annonces): prix 100 %, dispo 100 %, superficie 98 %, adresse 93 %, secteur 55 %, images 99 %, description 95 %6- fixture: ok (15 requêtes) · test: ok (2 verts)78## Champs extraits9- **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.10- `external_id` **stable** = slug de l'URL (`17-rue-de-liverpool`) ou `project-<uuid>` pour les 4 projets locatifs (Desrosiers, Chelsea Creek, Nuvo, PURE).11- **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.12- **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.13- **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²).14- **Disponibilité** : « Disponible maintenant » ou « Disponible le 1 septembre 2026 » → date ISO par la normalisation commune.15- **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.16- Badges de la carte (`PROMO`, `Dernières unités`) repris tels quels dans la description.1718## Champs indisponibles à la source19- Adresse civique des 4 **projets** (cartes portant un nom commercial) : non publiée → `address` vide (la ville/le secteur restent renseignés).20- lat/lng, animaux et meublé : non exposés structurellement (textmine les déduit de la description quand l'agence les écrit).21- Commodités structurées : aucune liste dédiée sur le site (tout est en prose dans la description).2223## Fragilités24- **robots.txt : `Crawl-delay: 10`**`request_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.25- Le serveur ne déclare **pas de charset** (`Content-Type: text/html`) : `resp.encoding = "utf-8"` est forcé, sinon tous les accents sont mojibake.26- Site bilingue : en-tête `Accept-Language: fr-CA` obligatoire (sinon « 2 bedrooms / Available Now »).27- 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.2829## Échantillon30- `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`31- `halfred:project-63a3366d-… | Nuvo | Gatineau | 3½ | À partir de 1295$ par mois | 1 104 pi²`32- `halfred:178-chemin-de-la-savane | Gatineau / Pointe-Gatineau | 4½ | 1156 $ | Disponible le 17 octobre 2026 → 2026-10-17`33