contraste — Contraste Immobilier
- site: https://contrasteimmobilier.ca (accueil → pages immeubles /appartements//)
- méthode: html
- annonces: 231 → 231
- couverture après (sur 231 annonces): prix 85%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
- fixture: ok · test: ok
Champs extraits
- title, unit_type, price/price_label, availability, images : attributs
data-*des cartesdiv.building-stack-unit(plugin « api-building-stack ») sur la page immeuble. - address : titre Elementor complet (« 4855 rue de L'Escarpement, Québec, Québec, G3K0N8 »), avec repli sur l'adresse courte du hero des pages « projet » (« 2784 ave Sasseville » pour Ellipse / Émergence II, qui n'affichent pas de ville). sector dérivé de l'adresse ; city via infer_city + carte d'accueil.
- amenities : NOUVEAU — liste CARACTÉRISTIQUES de l'immeuble (répéteur JetEngine
.jet-listing-dynamic-repeater__item span) : inclusions, animaux, stationnement, électroménagers… + type de bâtimentdata-housing-type(« Maison de ville ») quand présent. - details.contact : NOUVEAU — courriel/téléphone « Pour prendre rendez-vous » exposés dans les titres Elementor de la page immeuble (structuré, pas déduit du texte).
- description : meta og:description (texte complet du projet).
- area_sqft : lu depuis
data-sizemais uniquement si plausible (80–20 000) — chez Contraste l'attribut vaut toujours « 0 », donc None aujourd'hui ; l'extraction s'activera d'elle-même si le gestionnaire remplit le champ.
Champs indisponibles à la source
- Superficie :
data-size="0"partout, aucune mention en pi² dans les pages. - Prix des immeubles Focus I/II :
data-price="0"(la carte n'affiche aucun prix) — 34 unités restent volontairement sans prix (avant, elles portaient un faux « 0$/mois »). - Étage, meublé, lat/lng : non exposés.
- animaux : seulement en texte libre (« Chats autorisés, certaines conditions s'appliquent »).
Fragilités
- Dépend du plugin WordPress « api-building-stack » (attributs data-pid/data-name/data-rooms/ data-price) : un changement de thème casserait le parsing.
- La liste des immeubles vient des cartes de la page d'accueil (
a[href*="/appartements/"]). - Filtre géographique par ville de la carte d'accueil (Beaupré exclue) — si la carte omet la ville, l'immeuble passe avec défaut « Québec ».
- LACUNES GÉNÉRIQUES de normalisation constatées ici (non contournées localement) :
- « Non chauffé et éclairé » → inclusions.heating=true (faux positif : le motif positif
chauffematche « chauffé et » ; « non chauffé » n'est pas un motif négatif reconnu — « Non chauffé, non éclairé » passe par chance à cause de la virgule). - « Chats autorisés (…sous conditions) » n'est reconnu par aucun motif pets → pets reste None alors que la source l'affiche (devrait donner « conditions »).
- « Électroménagers selon disponibilités ($) » / « sur demande ($) » → appliances.fridge=true (les électroménagers ne sont pas inclus, ils sont en option payante).
- « Non chauffé et éclairé » → inclusions.heating=true (faux positif : le motif positif
Améliorations apportées
- Extraction des commodités d'immeuble (CARACTÉRISTIQUES) → amenities pour chaque unité (avant : amenities toujours vide, 231/231).
- Adresse de repli pour les pages « projet » (Ellipse, Émergence II) → 100 annonces qui n'avaient aucune adresse en ont maintenant une.
data-price="0"traité comme « prix non affiché » (avant : price_label « 0$/mois » inventé).- details.contact (email + téléphone location) quand la page l'affiche.
data-housing-typeajouté aux amenities ;data-sizebranché (inactif tant que la source le laisse à 0).
Échantillon avant/après
Agora Phase 2 — unité 206
- avant : 1519.0 | 4½ | Bientôt disponible (01 décembre 2026) | 2026-12-01 | area=None | pets=None | details={"floor": 2} | 4855 rue de L'Escarpement, Québec, Québec, G3K0N8 | amenities=[]
- après : 1519.0 | 4½ | Bientôt disponible (01 décembre 2026) | 2026-12-01 | area=None | pets=None | details={"inclusions":{"heating":true,"internet":true},"appliances":{"fridge":true,"washer_dryer_hookup":true},"ac":true,"parking":{"available":true,"type":"extérieur"},"floor":2,…} | même adresse | amenities=[Non chauffé et éclairé, Entrée laveuse-sécheuse, Internet inclus, Air climatisé, Chats autorisés sous conditions, Électroménagers sur demande($), Stationnement extérieur ($)]
ELLIPSE — unité 101
- avant : prix ok | 4½ | Disponible | now | address="" | details={}
- après : prix ok | 4½ | Disponible | now | address="2784 ave Sasseville" | details={"inclusions":{"heating":true,"electricity":true,"hot_water":true,"internet":true},"appliances":{"fridge":true,"stove":true},"ac":true,"gym":true,"parking":{"available":true,"type":"intérieur"},"contact":{"email":"location@contrasteimmobilier.ca","phone":"418-520-4412"}}