gendesign/tradein-mvp/backend/app/services
lekss361 f9e0b6bcbe feat(tradein): yandex_detail.py — Product JSON-LD + DOM detail parser
Stage 4 of YandexRealtyScraper v1 (Wave 4 / Worker A — parallel with
yandex_newbuilding.py and yandex_valuation.py).

Module: app/services/scrapers/yandex_detail.py
- YandexDetailScraper(BaseScraper) — async fetch_detail(offer_url)
- DetailEnrichment Pydantic model (offer_id, price/title/rooms/area/floor,
  description, sale_type, views, publish_date, agency block, metro stations,
  photos 8 sizes, newbuilding linkage, NLP best-effort fields)
- Helpers: _find_section_text(h2/h3 -> next siblings), _parse_metro_stations,
  _extract_relative_date, _extract_seller_name, _parse_title

Price source: Product JSON-LD offers.price (exact int) — falls back to None
if missing. Photos: 8 sizes from Product.image[] array.
NLP: parse_house_type / RE_YEAR / RE_METRO_WALK from description text
(best-effort — None when not present).

Tests: 35 unit tests against hand-crafted fixture HTML. All pass. Ruff clean.
2026-05-23 16:38:02 +03:00
..
exporters fix(tradein): security hotfix — C-3 config default + C-4 empty estimate persist + C-6 PDF URL allowlist (#435) 2026-05-23 09:38:23 +00:00
scrapers feat(tradein): yandex_detail.py — Product JSON-LD + DOM detail parser 2026-05-23 16:38:02 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
brand.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
cian_session.py feat(tradein): cian_session cookies management + admin endpoints (Wave 4 Worker A) (#457) 2026-05-23 13:22:00 +00:00
estimator.py feat(tradein): integrate Avito IMV as 5th evaluation source (on-demand cached) (#452) 2026-05-23 13:08:22 +00:00
geocoder.py fix(tradein): map-picker подставляет уличный адрес, а не название POI 2026-05-22 13:32:39 +05:00
house_metadata.py feat(tradein): кадастр зданий как источник house_metadata (#393) 2026-05-22 10:54:42 +05:00
scrape_pipeline.py feat(tradein): scrape_pipeline.py — Avito full orchestrator (search → houses → detail) (#451) 2026-05-23 12:55:13 +00:00