Skip to content
# sibelanger — Société immobilière Bélanger
- site: https://sibelanger.com/appartements-a-louer/ (+ pages détail /appartements-a-louer//)
- méthode: html
- annonces: 13 → 12 (1 annonce périmée retirée par le diff)
- couverture après (sur 12 annonces): prix 100%, adresse 100%, dispo 100%, superficie 75%, commodités 100%
- fixture: ok · test: ok
- Cartes liste : titre, secteur, prix, disponibilité (« Libre en septembre »), type (« 3 ½ », « Maison de ville »), icônes de caractéristiques (attributs title : Non meublé, Entrée laveuse-sécheuse, Balcon, Chauffé…), data-unit-id (external_id stable), carrousel de photos.
- Pages détail (nouveau) : adresse civique complète avec code postal (« 1175, rue de Chamonix, Québec (QC) G1H 6M3 »), superficie depuis « Plan de l'unité … pi2 » (texte brut → parse par finalize), description riche (contenu WP complet au lieu du og:description), commodités de l'appartement + commodités de l'immeuble (Service de maintenance 24/7, Stationnement extérieur/intérieur…), disponibilité de repli, galerie complète.
- Dérivés par finalize() : smoking (« Environnement sans fumée »), parking (« 1 stationnement inclus »), contact (téléphone de l'agente dans la description), furnished (« Non meublé »), price_from.
# Champs indisponibles à la source
- lat/lng : aucune coordonnée dans le HTML.
- Animaux : politique jamais mentionnée (ni carte, ni fiche).
- Superficie absente sur 3 fiches (pas de plan d'unité publié).
# Fragilités
- L'adresse affichée sur la fiche « Wilfrid-Pelletier - Unité 401 » est « 3060, Rue Antoine-Du Verdier » (même immeuble/complexe ou coquille du site) : on reprend fidèlement ce que la source publie.
- « Entrée lave-vaisselle » (une entrée, pas l'appareil) est classée
appliances.dishwasher: true par la normalisation générique — voir lacune ci-dessous.
- Cache détail calé sur titre|prix|dispo de la carte : une modification de description seule ne re-déclenche pas le téléchargement de la fiche.
# Améliorations apportées
- Pages détail désormais visitées via
self.detail() (cache BD) avec plafond de vraies requêtes (max_details=60) — avant : og:description + images à CHAQUE sync.
- Adresse : slug deviné (« 350, Chemin Ste-Foy ») → adresse civique complète publiée sur la fiche (avec code postal). Reste en repli si la fiche est indisponible.
- Superficie 0 % → 75 % (span .single-unit__plan-surface).
- Commodités enrichies (appartement + immeuble) ; « Services de proximité » (épicerie, parc…) volontairement exclus pour ne pas polluer.
- Description complète nettoyée des invites « Demander une visite ».
# Échantillon avant/après
- Chamonix - Unité 197 — avant : adresse « 1175, Chamonix » (slug), pas de superficie, description = og:description ; après : « 1175, rue de Chamonix, Québec (QC) G1H 6M3 », 1360 pi², description complète, + smoking false, parking inclus, contact 581-702-2720.
- Samuel de Champlain - 304 — avant : superficie NULL ; après : 938 pi², commodités immeuble ajoutées.
- Wilfrid-Pelletier - Unité 401 — avant : adresse « 962, Wilfrid Pelletier » (dérivée du slug) ; après : adresse publiée par la source (3060, Rue Antoine-Du Verdier, G1W 4X9).
# Lacune générique de normalisation (à traiter dans normalize.py, non contournée ici)
- « Entrée lave-vaisselle » / « sortie lave-vaisselle » devrait donner
dishwasher_hookup (comme washer_dryer_hookup) et non dishwasher: true — la règle dishwasher: (r"lave[- ]vaisselle|dishwasher") matche l'entrée seule.