fix(scrapers): avito_detail_backfill — снапшот ЕКБ+active, detail browser-only без curl-fallback на бан (#1814) #1815

Merged
lekss361 merged 1 commit from fix/avito-detail-backfill-ekb-browser-only into main 2026-06-20 05:34:18 +00:00
Owner

Closes #1814.

Проблема

avito_detail_backfill падал 4/6 с curl: (56) 429: снапшот тащил legacy не-ЕКБ листинги (Москва/СПб/Тюмень), browser-fetch на них спотыкался → curl-fallback → avito-антибот банит curl-фингерпринт.

Фикс

  1. Снапшот ЕКБ+active: AND is_active = TRUE AND source_url LIKE '%/ekaterinburg/%' (region_code захардкожен 66 в base.py — непригоден как дискриминатор; фильтр по URL-пути, зеркалит yandex_address_backfill).
  2. fetch_detail browser-only: когда browser_fetcher передан — browser firewall/HTTPError/dead → AvitoBlockedError, curl_cffi-сессия НЕ создаётся (раньше падало в curl → 429). curl-путь только при browser_fetcher=None.

Тесты

45 passed (detail subset) + 57 (curl-path регресс). Новые: SQL содержит is_active+/ekaterinburg/; browser-only — AsyncSession/_build_detail_session assert_not_called при browser-firewall.

На ревью

  • Классификация: browser-fail на dead-листинге → AvitoBlockedError → caller трактует как IP-блок (rotate + consecutive_blocks abort). Не мис-триггерит ли abort на просто-мёртвых листингах? (воркер: после ЕКБ+active фильтра кейс редок).
  • LIKE '%/ekaterinburg/%' покрывает ли все форматы ЕКБ-URL Авито.
  • Регресс: curl-путь (browser_fetcher=None) не тронут.
Closes #1814. ## Проблема `avito_detail_backfill` падал 4/6 с `curl: (56) 429`: снапшот тащил legacy не-ЕКБ листинги (Москва/СПб/Тюмень), browser-fetch на них спотыкался → curl-fallback → avito-антибот банит curl-фингерпринт. ## Фикс 1. **Снапшот ЕКБ+active**: `AND is_active = TRUE AND source_url LIKE '%/ekaterinburg/%'` (region_code захардкожен 66 в base.py — непригоден как дискриминатор; фильтр по URL-пути, зеркалит `yandex_address_backfill`). 2. **`fetch_detail` browser-only**: когда `browser_fetcher` передан — browser firewall/HTTPError/dead → `AvitoBlockedError`, **curl_cffi-сессия НЕ создаётся** (раньше падало в curl → 429). curl-путь только при `browser_fetcher=None`. ## Тесты 45 passed (detail subset) + 57 (curl-path регресс). Новые: SQL содержит is_active+/ekaterinburg/; browser-only — AsyncSession/`_build_detail_session` `assert_not_called` при browser-firewall. ## На ревью - **Классификация**: browser-fail на dead-листинге → `AvitoBlockedError` → caller трактует как IP-блок (rotate + consecutive_blocks abort). Не мис-триггерит ли abort на просто-мёртвых листингах? (воркер: после ЕКБ+active фильтра кейс редок). - `LIKE '%/ekaterinburg/%'` покрывает ли все форматы ЕКБ-URL Авито. - Регресс: curl-путь (browser_fetcher=None) не тронут.
lekss361 added 1 commit 2026-06-19 18:59:37 +00:00
fix(scrapers): avito_detail_backfill — снапшот ЕКБ+active, detail browser-only без curl-fallback на бан (#1814)
All checks were successful
CI / changes (pull_request) Successful in 6s
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
37fc50ad08
lekss361 merged commit 3ff4e067e2 into main 2026-06-20 05:34:18 +00:00
lekss361 deleted branch fix/avito-detail-backfill-ekb-browser-only 2026-06-20 05:34:19 +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#1815
No description provided.