Свип с чужим регионом падает вместо тихого сбора Екатеринбурга #3525

Merged
lekss361 merged 1 commit from feat/msk-mo-scrape-schedules into main 2026-09-15 07:09:06 +00:00
Owner

Что выяснилось

Ветка задумывалась как сид расписаний регулярного сбора по Москве и области. Сид завести нельзя: строка расписания задаёт регион ШТАМПА, а не гео-скоуп прогона.

У avito, cian и yandex скоуп берётся из реестра якорей по слагу города. Там 45 городов, все свердловские, Москвы и подмосковных нет. Неизвестный слаг даёт None, а run_*_city_sweep молча откатывается на якоря Екатеринбурга. То есть строка avito_city_sweep_moscow с регионом 77 собрала бы Екатеринбург и записала его как Москву, со штатными счётчиками и без единой аномалии в логах.

У ДомКлика хуже: гео-скоуп зашит в самом провайдере. Адресный идентификатор и идентификатор района Екатеринбурга подставляются в запрос, прогрев контекста идёт на екатеринбургский поддомен, а переданный идентификатор города не используется вообще.

Что сделано вместо сида

Гард _require_region_scope: регион, отличный от 66, обязан прийти со своими якорями, иначе ValueError до первого запроса. Вызван в трёх якорных свипах. У ДомКлика отдельная проверка в начале прогона, она лежит в общем теле, поэтому работает и для kit-native, и для продуктового дубля с куками.

Явно переданные якоря чужого региона пропускаются. Режется молчаливый откат на Екатеринбург, а не сама возможность собирать другой регион.

Чего это стоит

Сегодня ни одна строка расписания не задаёт регион, поэтому поведение прода не меняется. Гард снимается сам собой, когда города появятся в реестрах.

Гардом не закрыты полные загрузки avito и cian — они тоже получили параметр региона, но их скоуп я здесь не проверял. Строк расписаний с регионом у них тоже нет.

Что нужно источникам для регулярного сбора 77 и 50

  1. avito, cian, yandex: записи в реестрах якорей и идентификаторов площадок. Москве нужна сетка якорей, а не одна центральная точка при радиусе 1500 метров. Области — по городу на строку расписания.
  2. ДомКлик: параметризация адресного идентификатора, идентификатора района и origin прогрева по региону. Идентификаторы Москвы и области уже известны и проверены живьём, лежат в ручном коллекторе. Для Москвы неизвестен только идентификатор района.
  3. Отдельно проверить снятие устаревших по 77 и 50: без пересбора корпус первичной загрузки уедет в неактивные.

Проверено

Новый файл тестов на гард, 13 случаев, плюс регрессия по паритету планировщика кита, свипу ДомКлика, чекпойнту свипа и прокси-пулу циана — 107 passed. ruff check и format чисты.

## Что выяснилось Ветка задумывалась как сид расписаний регулярного сбора по Москве и области. Сид завести нельзя: строка расписания задаёт регион ШТАМПА, а не гео-скоуп прогона. У avito, cian и yandex скоуп берётся из реестра якорей по слагу города. Там 45 городов, все свердловские, Москвы и подмосковных нет. Неизвестный слаг даёт None, а `run_*_city_sweep` молча откатывается на якоря Екатеринбурга. То есть строка `avito_city_sweep_moscow` с регионом 77 собрала бы Екатеринбург и записала его как Москву, со штатными счётчиками и без единой аномалии в логах. У ДомКлика хуже: гео-скоуп зашит в самом провайдере. Адресный идентификатор и идентификатор района Екатеринбурга подставляются в запрос, прогрев контекста идёт на екатеринбургский поддомен, а переданный идентификатор города не используется вообще. ## Что сделано вместо сида Гард `_require_region_scope`: регион, отличный от 66, обязан прийти со своими якорями, иначе `ValueError` до первого запроса. Вызван в трёх якорных свипах. У ДомКлика отдельная проверка в начале прогона, она лежит в общем теле, поэтому работает и для kit-native, и для продуктового дубля с куками. Явно переданные якоря чужого региона пропускаются. Режется молчаливый откат на Екатеринбург, а не сама возможность собирать другой регион. ## Чего это стоит Сегодня ни одна строка расписания не задаёт регион, поэтому поведение прода не меняется. Гард снимается сам собой, когда города появятся в реестрах. Гардом не закрыты полные загрузки avito и cian — они тоже получили параметр региона, но их скоуп я здесь не проверял. Строк расписаний с регионом у них тоже нет. ## Что нужно источникам для регулярного сбора 77 и 50 1. avito, cian, yandex: записи в реестрах якорей и идентификаторов площадок. Москве нужна сетка якорей, а не одна центральная точка при радиусе 1500 метров. Области — по городу на строку расписания. 2. ДомКлик: параметризация адресного идентификатора, идентификатора района и origin прогрева по региону. Идентификаторы Москвы и области уже известны и проверены живьём, лежат в ручном коллекторе. Для Москвы неизвестен только идентификатор района. 3. Отдельно проверить снятие устаревших по 77 и 50: без пересбора корпус первичной загрузки уедет в неактивные. ## Проверено Новый файл тестов на гард, 13 случаев, плюс регрессия по паритету планировщика кита, свипу ДомКлика, чекпойнту свипа и прокси-пулу циана — 107 passed. ruff check и format чисты.
lekss361 added 1 commit 2026-09-15 07:00:45 +00:00
fix(scraper-kit): свип с чужим region_code падает вместо тихого сбора ЕКБ
All checks were successful
CI Trade-In / changes (pull_request) Successful in 12s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 15s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m9s
e4c1e9dab3
Расписание с region_code 77/50 (#3515 научил планировщик читать регион из строки)
задаёт регион ШТАМПА, но не гео-скоуп прогона. У avito/cian/yandex скоуп — anchors
города из CITY_ANCHORS, а этот реестр покрывает только Свердловскую область: строка
вида avito_city_sweep_moscow с {"region_code": 77} откатилась бы на EKB_ANCHORS,
собрала Екатеринбург и записала его как Москву — со штатными счётчиками и без
аномалий в логах. У domclick скоуп зашит ещё жёстче: providers/domclick/serp.py
строит BFF-URL с _EKB_ADDRESS_GUID/_EKB_AREA_ID и греет контекст на
ekaterinburg.domclick.ru, а city_id из default_params fetch_city игнорирует
(vestigial) — там ЕКБ собрался бы при любом region_code.

_require_region_scope: регион != 66 без явных anchors → ValueError до первого
запроса. Вызовы в run_avito/cian/yandex_city_sweep; у domclick отдельный гард на
region_code (anchors у него нет вовсе), стоящий в pipeline — поэтому он общий и для
kit-native job'а, и для продуктового дубля с куками Sber ID.

Явные anchors для чужого региона гард пропускает: запрещён не регион, а молчаливый
ЕКБ-fallback.

Москва и МО попали в прод-корпус разовым ручным коллектором
(scripts/local-avito-msk/collect.py -> msk_raw -> app.tasks.msk_raw_import), а не
свипами; регулярный сбор по ним требует сперва завести города в
CITY_ANCHORS/CITY_LOCATIONS, поэтому строк расписаний эта ветка не заводит.
lekss361 merged commit 2d2d9ebf17 into main 2026-09-15 07:09:06 +00:00
lekss361 deleted branch feat/msk-mo-scrape-schedules 2026-09-15 07:09:06 +00:00
Sign in to join this conversation.
No reviewers
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#3525
No description provided.