Skip to content
# 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)
- 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: 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.
- 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