feat(tradein): dedicated Cian mobile proxy — separate egress from Avito #923

Merged
bot-reviewer merged 1 commit from feat/cian-dedicated-proxy into main 2026-05-31 19:30:15 +00:00
Collaborator

Зачем

Cian и Avito делили один мобильный IP (settings.scraper_proxy_url). При параллельных прогонах (avito city-sweep + cian city-sweep) оба конкурировали за единственный egress → взаимные 240s-таймауты и баны (наблюдалось вживую: run 33/35 cian = 0 fetched, run 34 avito timeout, оба на одном IP).

Что

  • config.py: settings.cian_proxy_url (property) — CIAN_PROXY_URL с fallback на scraper_proxy_url (backward-compat). + cian_proxy_rotate_url (CIAN_PROXY_ROTATE_URL, fallback на avito rotate).
  • Все 5 Cian-прокси-точек переключены scraper_proxy_urlcian_proxy_url: cian.py, cian_detail.py, cian_newbuilding.py (×2), cian_valuation.py, cian_session.py (verify).
  • Avito / Yandex / N1 / DomClick — не затронуты.
  • Тесты: precedence/fallback cian_proxy_url.

Verified: settings.scraper_proxy_url в cian-коде не осталось; ruff passed.

Деплой (env — секреты, НЕ в git)

После merge — в прод .env.runtime:

CIAN_PROXY_URL=http://<user>:<pass>@<host>:<port>     # выделенный Cian-прокси (megafon)
CIAN_PROXY_ROTATE_URL=https://changeip.mobileproxy.space/?proxy_key=<key>

Без них — fallback на общий SCRAPER_PROXY_URL/AVITO_PROXY_URL (текущее поведение, безопасно).

Контекст

Часть работы по Cian ЕКБ-загрузке. Follow-up PR: exhaustive room×price партиционирование (обход SERP-cap ~54 стр) + IP-rotation в cian.py через cian_proxy_rotate_url.

## Зачем Cian и Avito делили **один мобильный IP** (`settings.scraper_proxy_url`). При параллельных прогонах (avito city-sweep + cian city-sweep) оба конкурировали за единственный egress → **взаимные 240s-таймауты и баны** (наблюдалось вживую: run 33/35 cian = 0 fetched, run 34 avito timeout, оба на одном IP). ## Что - `config.py`: `settings.cian_proxy_url` (property) — `CIAN_PROXY_URL` с fallback на `scraper_proxy_url` (backward-compat). + `cian_proxy_rotate_url` (`CIAN_PROXY_ROTATE_URL`, fallback на avito rotate). - Все **5 Cian-прокси-точек** переключены `scraper_proxy_url` → `cian_proxy_url`: `cian.py`, `cian_detail.py`, `cian_newbuilding.py` (×2), `cian_valuation.py`, `cian_session.py` (verify). - Avito / Yandex / N1 / DomClick — **не затронуты**. - Тесты: precedence/fallback `cian_proxy_url`. Verified: `settings.scraper_proxy_url` в cian-коде не осталось; ruff passed. ## Деплой (env — секреты, НЕ в git) После merge — в прод `.env.runtime`: ``` CIAN_PROXY_URL=http://<user>:<pass>@<host>:<port> # выделенный Cian-прокси (megafon) CIAN_PROXY_ROTATE_URL=https://changeip.mobileproxy.space/?proxy_key=<key> ``` Без них — fallback на общий `SCRAPER_PROXY_URL`/`AVITO_PROXY_URL` (текущее поведение, безопасно). ## Контекст Часть работы по Cian ЕКБ-загрузке. Follow-up PR: exhaustive room×price партиционирование (обход SERP-cap ~54 стр) + IP-rotation в cian.py через `cian_proxy_rotate_url`.
bot-backend added 1 commit 2026-05-31 19:28:40 +00:00
Cian и Avito делили один мобильный IP (scraper_proxy_url) → конкуренция за egress →
взаимные таймауты/баны при параллельных прогонах. Вводит settings.cian_proxy_url
(CIAN_PROXY_URL, fallback на scraper_proxy_url) + cian_proxy_rotate_url; все 5
Cian-прокси-точек переключены. Avito/прочие не затронуты.
bot-reviewer approved these changes 2026-05-31 19:30:02 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — чистый backward-compat config-change, мержу.

  • cian_proxy_url property = CIAN_PROXY_URLscraper_proxy_url fallback. 6 cian-точек переключены; avito/yandex/n1/domclick не тронуты (diff-confirmed).
  • Inert today: без CIAN_PROXY_URL → fallback на общий proxy = текущее поведение. Безопасный деплой.
  • Cross-file (урок #919): нет смены сигнатуры, только новый property + swap чтения атрибута. Существующие avito-тесты не тронуты; любой существующий cian-proxy-тест проходит т.к. cian_proxy_url фоллбэчится на scraper_proxy_url (то же значение) — red-main риска нет.
  • Тесты: precedence/fallback + реальный Settings env-binding через monkeypatch (валидирует validation_alias, не только inline-replica). Секретов в diff нет (env-only).
  • cian_proxy_rotate_url объявлен но не wired — осознанно для follow-up (IP-rotation в cian.py), no-op сейчас.

Squash-merge + delete branch.

<!-- gendesign-review-bot: sha=e63bdd9 verdict=approve --> ✅ **APPROVE** — чистый backward-compat config-change, мержу. - `cian_proxy_url` property = `CIAN_PROXY_URL` → `scraper_proxy_url` fallback. 6 cian-точек переключены; avito/yandex/n1/domclick не тронуты (diff-confirmed). - **Inert today**: без `CIAN_PROXY_URL` → fallback на общий proxy = текущее поведение. Безопасный деплой. - **Cross-file** (урок #919): нет смены сигнатуры, только новый property + swap чтения атрибута. Существующие avito-тесты не тронуты; любой существующий cian-proxy-тест проходит т.к. `cian_proxy_url` фоллбэчится на `scraper_proxy_url` (то же значение) — red-main риска нет. - Тесты: precedence/fallback + реальный `Settings` env-binding через monkeypatch (валидирует `validation_alias`, не только inline-replica). Секретов в diff нет (env-only). - `cian_proxy_rotate_url` объявлен но не wired — осознанно для follow-up (IP-rotation в cian.py), no-op сейчас. Squash-merge + delete branch.
bot-reviewer merged commit 02af421799 into main 2026-05-31 19:30:15 +00:00
bot-reviewer deleted branch feat/cian-dedicated-proxy 2026-05-31 19:30:15 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#923
No description provided.