feat(tradein/scrapers): detail_backfill через curl_cffi+backconnect вместо браузера/auv (развязка прокси) #1838
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1838
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-detail-backfill-curl"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Зачем
avito SERP (full_load/city_sweep) и avito detail_backfill делили ОДИН прокси-аккаунт auv (~5 параллельных коннектов). Браузерный
page.gotoфанится в десятки под-ресурсных коннектов → кап превышается → HTTP 500 → краши/зомби full_load и backfill при наложении. (Сегодня так упал avito run 263 и зомбил yandex_city_sweep.)Решение — развязка прокси БЕЗ покупки аккаунта
detail_backfill → curl_cffi через backconnect (mproxy) (авто-ротация IP, 1 коннект/запрос — 5-кап backconnect не проблема). SERP остаётся на браузере/auv. Разные аккаунты → нет контеншна, можно гонять параллельно.
Проверено вживую (100 ЕКБ-карточек curl/backconnect)
ok=85, blocked=0, err=15(транзиентные таймаут/302 мёртвых листингов). 0 антибот-блоков. floor/total_floors 100%, living_area_m2 67% (в БД было 2% — curl добавляет поле). year_built/house_type/bedrooms = 0% у avito в любом случае (ни curl, ни браузер не берут — приходят из cian/yandex/кадастра) → регресса полей нет.Что (
tradein-mvp/backend/)app/core/config.py(349-359): флагavito_detail_backfill_use_curl: bool = True(ENVAVITO_DETAIL_BACKFILL_USE_CURL; False = старое browser/auv поведение).app/tasks/avito_detail_backfill.py(92-133):browser_mode = scraper_fetch_mode=="browser" and not use_curl. Приuse_curl→ BrowserFetcher не создаётся,fetch_detail(url, browser_fetcher=None)→ curl-путь;fetch_detailсам строит эфемерную сессию через_build_detail_session()(egressscraper_proxy_url= backconnect mproxy, новый CONNECT-туннель/IP на запрос). Логируется режим на старте.НЕ затронуто
scrape_pipeline.pyfull_load/city_sweep inline-detail — остаются на браузере (проверено grep).Тесты
tests/tasks/test_avito_detail_backfill.py: 10/10 (8 + 2 новых на флаг).Связано: #1796 (avito rotation), #1814 (detail→browser, частично откатывается для backfill — на мобильном backconnect curl проходит).