lafrance_mathieu — Lafrance & Mathieu (GILM)
- site: https://lafrance-mathieu.com/louer-appartement-quebec (+ /logement/)
- méthode: html (liste + filtres ?boroughs=N, fiches immeubles)
- annonces: 39 → 39
- couverture après (sur 39 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100%
- fixture: ok (ré-enregistrée) · test: ok (2 passed)
Champs extraits
- Carte liste (inchangé) : id, adresse, arrondissement, « 4½ à partir de 1595$ », disponibilité, 3-4 icônes de commodités (alt).
- Fiche immeuble /logement/ (nouveau, via
self.detail()— cache BD, max 150 nouveaux fetchs/sync) :- adresse complète avec code postal (bloc « À propos de l'immeuble > Adresse ») ;
- lat/lng structurés (
<script id="building-coordinates">[{"loc": […]}]) — présents sur 24/39 immeubles ; - commodités complètes (p.attribute-description) : commodités immeuble + commodités et caractéristiques d'unité (« Chat accepté », « Balcon », « Entrée laveuse-sécheuse », « Entrée lave-vaisselle », « Semi-meublé », « Eau Chaude », « Électricité », « Chauffage », buanderie, conciergerie…) + « Accès et services » (école, autobus, parc…) — 15-16 items vs 3-4 avant ;
petsstructuré : items « Chat accepté »/« Chien accepté »/« Animaux acceptés » → oui/conditions (une seule espèce → conditions ; 39/39 acceptent le chat) ;- unités individuelles : numéro, étage, disponibilité, prix par unité → description (« Unité 5 · 1er étage — disponibilité : novembre 2026 — à partir de 1585,00$ ») + disponibilité de secours ;
details.construction_year(« Année de construction », structuré) et nombre total d'unités (description) ;details.contact.phonepropre à l'immeuble (panneau « S'informer », différent du numéro corporatif) ;- photos S3 (comme avant), description remplacée (avant : chaîne cassée « À propos de l'immeuble » seule).
Champs indisponibles à la source
- Superficie : jamais publiée (ni carte ni fiche).
- lat/lng absents sur 15/39 fiches (script
building-coordinatesvide chez la source). - Meublé par unité : seulement l'item immeuble « Semi-meublé » quand présent (dérivé "semi" par la couche commune).
Fragilités
- Le site répond 302 → / si le User-Agent n'est pas complet (l'UA de base.py passe ; un curl avec UA court est redirigé).
- Les unités sont dupliquées dans la page (bloc inline + modal) : dédup par tuple (numéro, dispo, prix).
- Le téléphone d'immeuble est du texte libre dans le panneau « S'informer » (regex).
- Une annonce = un immeuble (schéma d'external_id conservé) : quand plusieurs unités/types coexistent, le prix/type affichés viennent de la carte (le plus bas), le détail par unité est dans la description.
- Étage en description (« 1er étage », « SS ») : la dérivation
details.floorde la couche commune peut retenir l'étage de la première unité listée — approximation inhérente aux annonces multi-unités.
Améliorations apportées
- Fiches détail migrées vers
self.detail()(avant : les 39 fiches re-téléchargées à chaque sync, sans budget). - Adresse enrichie du code postal ; lat/lng structurés ; pets structuré ; année de construction ; téléphone d'immeuble.
- Commodités : de 3-4 icônes de carte à la liste complète de la fiche (~15 items).
- Description reconstruite : infos immeuble + inventaire des unités disponibles (avant : littéralement « À propos de l'immeuble »).
Échantillon avant/après
5900 boul. St-Jacques (Lebourgneuf) (1595 $, 4½, octobre 2026)
- avant : address=
5900 boul. St-Jacques, description=À propos de l'immeuble, amenities=3 icônes, pets=None, details={ac, parking, price_from} - après : address=
5900 boul. St-Jacques, Québec, Québec, G2C1M6, pets=conditions(chat accepté), details={…, construction_year: 2022, contact:{phone:"418-626-3070"}}, amenities=15 items, description=Immeuble construit en 2022, 12 unités | Unité 5 · 1er étage — disponibilité : novembre 2026 — à partir de 1585,00$ | Unité 11 · 3e étage — …
1573, rue Pierre-Corneille (1250 $, 4½, libre immédiatement)
- avant : pas de lat/lng, description cassée ; après : lat=46.820519/lng=-71.365499, G2E4W9, construit en 1978, 6 unités, pets=conditions