[tradein][scrapers] #883 Phase 2: avito.py SERP — дефолт на BrowserFetcher (camoufox) #1805

Closed
opened 2026-06-19 17:34:09 +00:00 by lekss361 · 0 comments
Owner

Цель (epic #883, Phase 2)

Перевести avito SERP-фетч (avito.py) на camoufox-браузер по умолчанию. Браузер per-provider + общий ротирующий прокси задеплоены и проверены (avito /fetch = 200, end-to-end через BrowserFetcher подтверждён живьём).

Текущее состояние

avito.py — гибрид: _fetch_serp_html() использует self._browser (BrowserFetcher) если задан, иначе curl_cffi. Firewall-detect в browser-mode по HTML-маркерам (_is_firewall_page), в curl-mode по HTTP 403/429.

Что сделать

  1. В __aenter__ по умолчанию поднимать BrowserFetcher(source="avito") → SERP идёт через браузер.
  2. curl_cffi оставить как fallback (если браузер вернул firewall/пусто — один retry через curl).
  3. Убедиться, что _is_firewall_page корректно ловит бан в browser-HTML.
  4. IP-ротация: прокси ротирует сам (BackConnect) — code-side _rotate_ip не нужен (но не ломать).
  5. Тесты: обновить avito SERP-тесты под browser-путь (мокать BrowserFetcher.fetch).

Усилие

M (150–250 LOC).

Файлы: tradein-mvp/backend/app/services/scrapers/avito.py + тесты. Cross-ref #883/#885, план миграции (vault). Не трогать avito_imv (Phase 4).

## Цель (epic #883, Phase 2) Перевести avito SERP-фетч (`avito.py`) на camoufox-браузер по умолчанию. Браузер per-provider + общий ротирующий прокси задеплоены и проверены (avito `/fetch` = 200, end-to-end через `BrowserFetcher` подтверждён живьём). ## Текущее состояние `avito.py` — гибрид: `_fetch_serp_html()` использует `self._browser` (BrowserFetcher) если задан, иначе curl_cffi. Firewall-detect в browser-mode по HTML-маркерам (`_is_firewall_page`), в curl-mode по HTTP 403/429. ## Что сделать 1. В `__aenter__` по умолчанию поднимать `BrowserFetcher(source="avito")` → SERP идёт через браузер. 2. curl_cffi оставить как fallback (если браузер вернул firewall/пусто — один retry через curl). 3. Убедиться, что `_is_firewall_page` корректно ловит бан в browser-HTML. 4. IP-ротация: прокси ротирует сам (BackConnect) — code-side `_rotate_ip` не нужен (но не ломать). 5. Тесты: обновить avito SERP-тесты под browser-путь (мокать BrowserFetcher.fetch). ## Усилие M (150–250 LOC). **Файлы:** `tradein-mvp/backend/app/services/scrapers/avito.py` + тесты. Cross-ref #883/#885, план миграции (vault). Не трогать avito_imv (Phase 4).
lekss361 added the
enhancement
priority/p1
scope/backend
scrapers
status/wip
tradein
labels 2026-06-19 17:34:42 +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#1805
No description provided.