fix(tradein): avito _extract_total_count returns 0 on no-results page — stop empty-bracket split/rotate waste #1763
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#1763
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/avito-empty-page-total-zero"
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?
Прод-инцидент (run 209, curl-режим)
avito curl-свип застрял на 14+ мин в ВЫСОКИХ ценовых брекетах низко-ценовых комнатностей (студии по 17М, которых нет), errors=1058. Причина: на пустой выборке avito отдаёт HTTP 200 + страница БЕЗ
data-marker="page-title/count"(но с маркером «ничего не найдено» И ~50 ПОХОЖИХ объявлений-fallback)._extract_total_countне находил count → None → resilience (probe failed → splitting assume heavy, #1757) дробил пустой диапазон + ротировал IP (9с каждый) → застой.Решение
_extract_total_countпорядок:page-title/count(несёт только непустая выборка) → если нет, scan наничего не найден(lowercase, ловит «ничего не найдено»/«Ничего не найдено») → return 0 → иначе None (реально битая/captcha).Эффект:
total=0→_walk_price_rangeinstant return (без split/rotation/пагинации). Чинит застой.Noneостаётся только для реально битых страниц (captcha/firewall).Изменения
scrapers/avito.py(+43) —_AVITO_NO_RESULTS_MARKERS = ("ничего не найден",); реордер_extract_total_count(count → no-results→0 → None).tests/scrapers/test_avito_exhaustive.py(+32, 4 теста) — count→1178; no-count+маркер (с fallback item-id)→0; no-count+no-маркер→None; «Ничего не найдено»→0; count-wins-over-marker.Тесты
Full suite: 2007 passed, 1 skipped, 0 failed.
Сопутствующий конфиг (применён в .env.runtime)
AVITO_PROXY_MAX_ROTATIONS=0— на backconnect ручная ротация (changeip от старого прокси #500825) избыточна (backconnect авто-ротирует IP per-request) + жжёт 9с. После этого фикса + конфига curl-свип проходит пустые брекеты мгновенно.Прод-смоук после merge+deploy
Полный avito_full_load (curl) → должен пройти ВСЕ 7 комнатностей за минуты (пустые верхние брекеты → instant skip), 0 застоев, измерить итоговое покрытие active.