Old HTML scraper dead: /search?city_id retired in DomClick redesign + VPS IP QRATOR-banned (prod domclick_city_sweep reported done/0 every run). New path: - GET bff-search-web.domclick.ru/api/offers/v1 + count/v1 via BrowserFetcher(source="domclick") -> generic provider -> shared mobile proxy -> bypasses QRATOR (prod-verified live: 20 items returned, no block). - Sweeps 6 room buckets (st/1/2/3/4/5+); recursive binary price-split for oversized buckets (rooms=2 ~2215 > offset cap 2000); count/v1 sizes buckets. - Maps SERP JSON -> ScrapedLot with lat/lon at ~100% (closes avito 54% NULL-lat gap); per-card EKB geo-guard. - Honest status (#1968): QRATOR block OR fetch errors with 0 lots -> mark_failed, not mark_done. Parse failures are per-page resilient (break bucket, keep partial lots) so a transient bad page never aborts the whole sweep. - Schedule shipped DORMANT (enabled=false, pages=100) via 138_domclick_bff_rewrite_schedule.sql; operator enables after prod smoke. 42 scraper tests (price-split boundaries, parse-error resilience, honest status); full backend suite green; ruff clean. Layer B (detail renovation/wallType/ priceHistory) deferred to #1846 follow-up.
33 lines
1.7 KiB
PL/PgSQL
33 lines
1.7 KiB
PL/PgSQL
-- 138_domclick_bff_rewrite_schedule.sql
|
|
--
|
|
-- Обновляет параметры расписания domclick_city_sweep после переписки скрейпера
|
|
-- на BFF JSON API (https://bff-search-web.domclick.ru/api/offers/v1).
|
|
--
|
|
-- DORMANT: enabled остаётся false до тех пор пока оператор не верифицирует
|
|
-- прод-smoke нового BFF-скрейпера вручную:
|
|
-- UPDATE scrape_schedules SET enabled = true WHERE source = 'domclick_city_sweep';
|
|
--
|
|
-- Ключевые изменения относительно 122_enable_domclick_city_sweep.sql:
|
|
-- - pages_per_anchor поднят до 100 (каждый бакет до 2000 листингов,
|
|
-- rooms=2 нуждается в price-split → реально ≈330 страниц)
|
|
-- - rooms убран из default_params — скрейпер всегда обходит все ROOM_BUCKETS
|
|
-- (st/1/2/3/4/5+) внутри независимо от этого параметра
|
|
-- - request_delay_sec оставлен 6 (как в 122; BFF JSON легче HTML-рендера)
|
|
--
|
|
-- Зависимости: 052_scrape_schedules.sql (таблица), 122_enable_domclick_city_sweep.sql
|
|
-- (строка должна существовать — INSERT ON CONFLICT DO NOTHING в 122).
|
|
-- Idempotent: UPDATE не упадёт если строка уже обновлена (runs повторно безопасно).
|
|
|
|
BEGIN;
|
|
|
|
UPDATE scrape_schedules
|
|
SET enabled = false,
|
|
default_params = jsonb_build_object(
|
|
'city_id', 4,
|
|
'pages_per_anchor', 100,
|
|
'request_delay_sec', 6
|
|
),
|
|
updated_at = now()
|
|
WHERE source = 'domclick_city_sweep';
|
|
|
|
COMMIT;
|