[tradein][scrapers] Верифицировать Yandex totalItems extraction после 1-го prod-прогона full-load (#931 follow-up) #933

Closed
opened 2026-05-31 21:10:45 +00:00 by bot-reviewer · 1 comment
Collaborator

Follow-up из PR #931 (merged) — exhaustive Yandex full-load.

Контекст

YandexRealtyScraper._extract_total_count пробует 6 state-путей + DOM-regex, но они не верифицированы на живой Yandex-выдаче (state «chunked + evaporates after hydration»). Когда total=None → _walk_price_range падает в paginate-until-empty fallback (без price-split).

Риск

Если на проде total всегда None → каждый бакет идёт fallback'ом → exhaustive-гарантия деградирует до ~575 карточек/комнатность (SERP cap) ≈ 2875 max вместо полного покрытия ЕКБ. Безопасно (не падает), но «exhaustive» не достигается.

Задача

  1. Запустить POST /admin/scrape/yandex-full-load на проде (после YANDEX_PROXY_URL в .env.runtime).
  2. В логах сверить долю yandex: rooms=… totalItems=N (extraction сработал) vs totalItems=None … paginate-until-empty fallback.
  3. Если fallback доминирует → снять реальный state с prod-выдачи (docker exec + сохранить HTML), найти актуальный путь к total, поправить _TOTAL_COUNT_PATHS / regex. Снять # TODO(yandex-total).
  4. DoD: ≥80% бакетов извлекают totalItems из state (price-split работает) ИЛИ задокументировано что fallback-покрытия достаточно для ЕКБ-объёма.

Refs #931, #926, #929.

Follow-up из PR #931 (merged) — exhaustive Yandex full-load. ## Контекст `YandexRealtyScraper._extract_total_count` пробует 6 state-путей + DOM-regex, но они **не верифицированы** на живой Yandex-выдаче (state «chunked + evaporates after hydration»). Когда total=None → `_walk_price_range` падает в **paginate-until-empty fallback** (без price-split). ## Риск Если на проде total всегда None → каждый бакет идёт fallback'ом → exhaustive-гарантия деградирует до ~575 карточек/комнатность (SERP cap) ≈ 2875 max вместо полного покрытия ЕКБ. Безопасно (не падает), но «exhaustive» не достигается. ## Задача 1. Запустить `POST /admin/scrape/yandex-full-load` на проде (после `YANDEX_PROXY_URL` в `.env.runtime`). 2. В логах сверить долю `yandex: rooms=… totalItems=N` (extraction сработал) vs `totalItems=None … paginate-until-empty fallback`. 3. Если fallback доминирует → снять реальный state с prod-выдачи (`docker exec` + сохранить HTML), найти актуальный путь к total, поправить `_TOTAL_COUNT_PATHS` / regex. Снять `# TODO(yandex-total)`. 4. DoD: ≥80% бакетов извлекают totalItems из state (price-split работает) ИЛИ задокументировано что fallback-покрытия достаточно для ЕКБ-объёма. Refs #931, #926, #929.
bot-reviewer added the
priority/p2
scope/backend
scrapers
status/ready
tradein
labels 2026-05-31 21:10:55 +00:00
Collaborator

Закрыто как неактуальное — фрагильный DOM _extract_total_count (6 state-путей + DOM-regex) заменён. #1665 (f8779c0) переписал yandex_realty.py с DOM-скрейпинга на структурный JSON gate-API (/gate/react-page/get/) → totalItems берётся из стабильного JSON-поля, а не испаряющегося после гидрации DOM. Проблема устранена в корне.

✅ Закрыто как неактуальное — фрагильный DOM `_extract_total_count` (6 state-путей + DOM-regex) заменён. #1665 (f8779c0) переписал yandex_realty.py с DOM-скрейпинга на структурный JSON gate-API (`/gate/react-page/get/`) → totalItems берётся из стабильного JSON-поля, а не испаряющегося после гидрации DOM. Проблема устранена в корне.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#933
No description provided.