[tradein][scrapers] Cian detail-обогащение: kitchen 3% / ceiling 0% / описание 3% не долетают; отзывы ЖК не садятся #1791

Closed
opened 2026-06-19 15:39:52 +00:00 by lekss361 · 0 comments
Owner

Проблема

SERP-поля Cian покрыты хорошо (rooms/area/floor/year ~100%/92%, metro 95%, living_area 71%), но detail-поля точечно не долетают: kitchen_area_m2 3%, ceiling_height 0%, description 3%. И отзывы ЖК не попадают в БД.

Доказательства (live probe + DB 2026-06-19)

Покрытие активных cian-листингов (16640):

  • kitchen_area_m2: 422 (3%), ceiling_height: 0, description: 433 (3%)
  • repair_state: 6403 (38%), living_area_m2: 11787 (71%), metro_stations: 15829 (95%)

Раз metro/living/repair долетают через тот же UPDATE — cian_detail UPDATE запускается, значит kitchen/ceiling — field-specific проблема, не throughput.

  • cian_detail.py:143 парсит ceiling_height=_parse_float(offer.get("ceilingHeight")), :301 пишет ceiling_height = COALESCE(:ch, ceiling_height) — но в БД 0. Вероятно ключ offer.ceilingHeight дрейфнул / лежит в другом узле state, либо _parse_float глушит.
  • Живой пробинг карточки (ekb.cian.ru/sale/flat/317396310): «Высота потолков» на странице ЕСТЬ → данные есть, парс не достаёт.
  • Антибот Cian = Google reCAPTCHA (cianCaptchaInterceptor, ___grecaptcha_cfg); на чистом IP проходит.
  • Отзывы ЖК: cian_newbuilding.py:197-202 парсит reviews из initialState/mfe_states, но house_reviews = 0 строк по всем источникам → не персистятся в стандартную таблицу.

Что сделать

  1. Снять сырой fetched-HTML cian-карточки → найти фактический путь offer.ceilingHeight / offer.kitchenArea в state, починить маппинг в cian_detail.py.
  2. Разобраться, почему description 3% — детальное описание из detail-state не садится (или detail-backfill не покрывает).
  3. Отзывы ЖК (cian_newbuilding reviews) — довести до house_reviews/houses.rating_score.

Усилие

M (dev-заход с сырым state + правки маппинга + тест).

Файлы: tradein-mvp/backend/app/services/scrapers/cian_detail.py, cian_newbuilding.py.
Cross-ref: #1781 (cian первичка staleness), #1789 (avito ЖК-enrichment — тот же класс «парс есть, в БД пусто»). Анализ: vault research/Avito_Scraper_Endpoint_Map_0619.md.

## Проблема SERP-поля Cian покрыты хорошо (rooms/area/floor/year ~100%/92%, metro 95%, living_area 71%), но **detail-поля точечно не долетают**: `kitchen_area_m2` 3%, `ceiling_height` **0%**, `description` 3%. И отзывы ЖК не попадают в БД. ## Доказательства (live probe + DB 2026-06-19) Покрытие активных cian-листингов (16640): - kitchen_area_m2: 422 (3%), ceiling_height: **0**, description: 433 (3%) - repair_state: 6403 (38%), living_area_m2: 11787 (71%), metro_stations: 15829 (95%) Раз metro/living/repair долетают через тот же UPDATE — `cian_detail` UPDATE **запускается**, значит kitchen/ceiling — field-specific проблема, не throughput. - `cian_detail.py:143` парсит `ceiling_height=_parse_float(offer.get("ceilingHeight"))`, `:301` пишет `ceiling_height = COALESCE(:ch, ceiling_height)` — но в БД 0. Вероятно ключ `offer.ceilingHeight` дрейфнул / лежит в другом узле state, либо `_parse_float` глушит. - Живой пробинг карточки (ekb.cian.ru/sale/flat/317396310): «Высота потолков» на странице ЕСТЬ → данные есть, парс не достаёт. - Антибот Cian = Google reCAPTCHA (`cianCaptchaInterceptor`, `___grecaptcha_cfg`); на чистом IP проходит. - Отзывы ЖК: `cian_newbuilding.py:197-202` парсит `reviews` из initialState/mfe_states, но `house_reviews` = 0 строк по всем источникам → не персистятся в стандартную таблицу. ## Что сделать 1. Снять сырой fetched-HTML cian-карточки → найти фактический путь `offer.ceilingHeight` / `offer.kitchenArea` в state, починить маппинг в `cian_detail.py`. 2. Разобраться, почему `description` 3% — детальное описание из detail-state не садится (или detail-backfill не покрывает). 3. Отзывы ЖК (`cian_newbuilding` reviews) — довести до `house_reviews`/`houses.rating_score`. ## Усилие M (dev-заход с сырым state + правки маппинга + тест). **Файлы:** `tradein-mvp/backend/app/services/scrapers/cian_detail.py`, `cian_newbuilding.py`. **Cross-ref:** #1781 (cian первичка staleness), #1789 (avito ЖК-enrichment — тот же класс «парс есть, в БД пусто»). Анализ: vault `research/Avito_Scraper_Endpoint_Map_0619.md`.
lekss361 added the
bug
priority/p2
scope/backend
scrapers
status/ready
tradein
labels 2026-06-19 15:40:13 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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#1791
No description provided.