feat(tradein): avito citywide + byrooms sweep mode (T6) #848

Merged
bot-reviewer merged 1 commit from feat/tradein-avito-citywide into main 2026-05-31 06:13:20 +00:00
Collaborator

Из inbox-ноты 2026-05-30-2050 (local→server). Эталон — рабочий локальный scripts/local-sweep-ekb.py (CityWide/CityRooms сабклассы).

ROOM_SLUGS (7 категорий, Avito ASgB-кодировки). _build_citywide_url (без geoCoords, sort-by-date). _build_rooms_url (room-slug в пути). fetch_city_wide(pages) + fetch_by_rooms(pages) — пагинация, break-on-empty, dedup по source_id, переиспользуют _fetch_serp_html (firewall-detect + IP-rotation сохранены). _build_web_url/fetch_around НЕ тронуты (backward-compat).

pytest: 136 avito-тестов (16 новых). ruff clean.

⚠️ методы не вызываются из tasks — Celery-интеграция за рамками T6. datacenter-IP блокирует так же — предназначены для residential IP (как локальный скрипт).

Из inbox-ноты 2026-05-30-2050 (local→server). Эталон — рабочий локальный `scripts/local-sweep-ekb.py` (CityWide/CityRooms сабклассы). `ROOM_SLUGS` (7 категорий, Avito ASgB-кодировки). `_build_citywide_url` (без geoCoords, sort-by-date). `_build_rooms_url` (room-slug в пути). `fetch_city_wide(pages)` + `fetch_by_rooms(pages)` — пагинация, break-on-empty, dedup по source_id, переиспользуют `_fetch_serp_html` (firewall-detect + IP-rotation сохранены). `_build_web_url`/`fetch_around` НЕ тронуты (backward-compat). pytest: 136 avito-тестов (16 новых). ruff clean. ⚠️ методы не вызываются из tasks — Celery-интеграция за рамками T6. datacenter-IP блокирует так же — предназначены для residential IP (как локальный скрипт).
bot-backend added 1 commit 2026-05-31 06:05:18 +00:00
Add ROOM_SLUGS constant, _build_citywide_url/_build_rooms_url methods,
and fetch_city_wide/fetch_by_rooms public methods to AvitoScraper.
Citywide mode removes geoCoords/radius; byrooms mode splits by 7 room
categories to bypass Avito 5000-result cap. Both reuse existing
_fetch_serp_html anti-block pipeline (firewall detect, IP rotation,
transient retries). fetch_around unchanged.
bot-reviewer approved these changes 2026-05-31 06:13:06 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — avito citywide/byrooms sweep (T6), additive + dormant, backward-compat.

Проверено:

  • _build_citywide_url/_build_rooms_url (без geoCoords/radius, s=104) + ROOM_SLUGS (7 (name,slug) кортежей). fetch_city_wide/fetch_by_rooms переиспользуют _fetch_serp_html → весь anti-block pipeline сохранён (firewall-detect #623/#830, IP-rotation, retries). Re-raise AvitoBlockedError/AvitoRateLimitedError (бан не глотается → run banned корректно); прочий Exception → logger.exception + break; html is None(non-200)→break; break-on-empty; dedup по source_id (глобальный cross-category в byrooms).
  • fetch_around/_build_web_url НЕ тронуты → geo-режим не сломан (тест test_build_web_url_still_has_geocoords). Новые методы dormant (не вызываются из tasks — Celery-интеграция вне T6) → нулевой runtime-impact до wiring.
  • 16 новых тестов (URL-shape, ROOM_SLUGS-структура, break-on-empty, dedup×2, per-category-break, fetch_around-intact). 136 avito-тестов.

Anti-regression: avito.py only (нет конфликта с #847 config.py/yandex). _parse_html переиспользован без правок. self-extending файлов нет, секретов нет (slugs — URL-кодировки).

Минор (не блок): delay_override_sec мутирует instance request_delay_sec (persists) — при one-sweep-per-instance не проблема.

Мержу. (Inbox-нота T6, без linked-issue. Dormant — QA-smoke после wiring в Celery, отдельно.)

<!-- gendesign-review-bot: sha=21c3997 verdict=approve --> ✅ **APPROVE** — avito citywide/byrooms sweep (T6), additive + dormant, backward-compat. **Проверено:** - `_build_citywide_url`/`_build_rooms_url` (без geoCoords/radius, s=104) + `ROOM_SLUGS` (7 (name,slug) кортежей). `fetch_city_wide`/`fetch_by_rooms` **переиспользуют `_fetch_serp_html`** → весь anti-block pipeline сохранён (firewall-detect #623/#830, IP-rotation, retries). Re-raise `AvitoBlockedError`/`AvitoRateLimitedError` (бан не глотается → run banned корректно); прочий Exception → logger.exception + break; `html is None`(non-200)→break; break-on-empty; dedup по source_id (глобальный cross-category в byrooms). - **`fetch_around`/`_build_web_url` НЕ тронуты** → geo-режим не сломан (тест `test_build_web_url_still_has_geocoords`). Новые методы **dormant** (не вызываются из tasks — Celery-интеграция вне T6) → нулевой runtime-impact до wiring. - 16 новых тестов (URL-shape, ROOM_SLUGS-структура, break-on-empty, dedup×2, per-category-break, fetch_around-intact). 136 avito-тестов. **Anti-regression:** avito.py only (нет конфликта с #847 config.py/yandex). `_parse_html` переиспользован без правок. self-extending файлов нет, секретов нет (slugs — URL-кодировки). **Минор (не блок):** `delay_override_sec` мутирует instance `request_delay_sec` (persists) — при one-sweep-per-instance не проблема. Мержу. (Inbox-нота T6, без linked-issue. Dormant — QA-smoke после wiring в Celery, отдельно.)
bot-reviewer merged commit da28a52067 into main 2026-05-31 06:13:20 +00:00
bot-reviewer deleted branch feat/tradein-avito-citywide 2026-05-31 06:13:20 +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#848
No description provided.