Авито: geoCoords/radius в SERP-URL сервером не применяются — якорный city-sweep качает 5× одну и ту же городскую выдачу #3043

Open
opened 2026-08-21 15:26:15 +00:00 by bot-backend · 1 comment
Collaborator

Замер (21.08.2026 15:21 UTC, сайдкар camoufox, узел 9, p=1, s=104, radius=1)

Три якоря, разнесённые на 10+ км:

путь якорь карточек total (page-title/count) первые три адреса
общий prodam-ASgB… центр 56.8389,60.6057 55 45 665 Учителей 22 · Ирбитская 13 · Белинского 222
общий Уралмаш 56.8890,60.5800 55 45 212 те же
общий Академический 56.7880,60.5300 45 45 212 те же
prodam/vtorichka Уралмаш 60 9 036 те же
prodam/vtorichka Академический 50 9 601 те же

Пересечения по source_id страницы 1: центр ∩ Уралмаш = 55 из 55, центр ∩ Академический = 45 из 45, Уралмаш ∩ Академический (вторичка) = 50 из 50. total при этом — городской (45 тыс. / 9 тыс.), а не «в радиусе 1 км».

Вывод: geoCoords и radius в query Авито на сервере не применяет — выдача одна и та же, городская, newest-first. (Одна из шести загрузок — читаемый путь, центр — вернула 0 карточек и total=None, то есть заглушку; транзиент, на вывод не влияет.)

Что это значит для avito_city_sweep

Свип ходит «якорями» (_job_avito_city_sweepfetch_around(lat, lon, radius_m, pages=pages_per_anchor)), в прогоне 4539: anchors_total=5, 3 страницы на якорь → ~15 запросов, уникальных 137 — то есть ровно первые ~3 страницы города, скачанные пять раз. Исторический коридор 93–160 — это не «объявления вокруг пяти точек», а размер первых страниц newest-first. Якоря не расширяют покрытие ни на одно объявление и тратят 4/5 запросов (и антибан-бюджета) впустую.

Это не регрессия #3033/#3039 — общий путь ведёт себя так же; обнаружено при проверке предусловия follow-up'а (PR по якорному/citywide пути ссылается сюда).

Что стоит сделать (решение по форме — за владельцем)

  1. Убрать иллюзию гео: свип — один citywide-проход fetch_city_wide(pages=N) вместо N якорей (те же первые страницы, в 5 раз меньше запросов), либо найти рабочий гео-параметр (в UI карты Авито запрос уходит иначе; geoCoords из старого веб-URL, похоже, сервером больше не читается — проверить, как именно строит URL живой браузер при поиске по карте, тем же приёмом, что в #3033/#3034).
  2. Честное имя: пока гео не работает, счётчики anchors_total/anchors_done в scrape_runs.counters и слово «якорь» в логах вводят в заблуждение.
  3. Покрытие: если нужен именно полный город — это fetch_all_secondary (комнатность × цена), а не якоря.

Критерий приёмки

Два запроса с разными geoCoords дают разные наборы source_id (пересечение ≪ 100 %) — либо якорный режим убран, и число запросов свипа падает в ~anchors_total раз при том же unique_fetched.

## Замер (21.08.2026 15:21 UTC, сайдкар camoufox, узел 9, `p=1`, `s=104`, `radius=1`) Три якоря, разнесённые на 10+ км: | путь | якорь | карточек | total (`page-title/count`) | первые три адреса | |---|---|---:|---:|---| | общий `prodam-ASgB…` | центр 56.8389,60.6057 | 55 | 45 665 | Учителей 22 · Ирбитская 13 · Белинского 222 | | общий | Уралмаш 56.8890,60.5800 | 55 | 45 212 | **те же** | | общий | Академический 56.7880,60.5300 | 45 | 45 212 | **те же** | | `prodam/vtorichka` | Уралмаш | 60 | 9 036 | те же | | `prodam/vtorichka` | Академический | 50 | 9 601 | те же | Пересечения по `source_id` страницы 1: центр ∩ Уралмаш = **55 из 55**, центр ∩ Академический = **45 из 45**, Уралмаш ∩ Академический (вторичка) = 50 из 50. `total` при этом — городской (45 тыс. / 9 тыс.), а не «в радиусе 1 км». **Вывод:** `geoCoords` и `radius` в query Авито на сервере не применяет — выдача одна и та же, городская, newest-first. (Одна из шести загрузок — читаемый путь, центр — вернула 0 карточек и `total=None`, то есть заглушку; транзиент, на вывод не влияет.) ## Что это значит для `avito_city_sweep` Свип ходит «якорями» (`_job_avito_city_sweep` → `fetch_around(lat, lon, radius_m, pages=pages_per_anchor)`), в прогоне 4539: `anchors_total=5`, 3 страницы на якорь → ~15 запросов, **уникальных 137** — то есть ровно первые ~3 страницы города, скачанные пять раз. Исторический коридор 93–160 — это не «объявления вокруг пяти точек», а размер первых страниц newest-first. Якоря не расширяют покрытие ни на одно объявление и тратят 4/5 запросов (и антибан-бюджета) впустую. Это не регрессия #3033/#3039 — общий путь ведёт себя так же; обнаружено при проверке предусловия follow-up'а (PR по якорному/citywide пути ссылается сюда). ## Что стоит сделать (решение по форме — за владельцем) 1. **Убрать иллюзию гео**: свип — один citywide-проход `fetch_city_wide(pages=N)` вместо N якорей (те же первые страницы, в 5 раз меньше запросов), либо найти рабочий гео-параметр (в UI карты Авито запрос уходит иначе; `geoCoords` из старого веб-URL, похоже, сервером больше не читается — проверить, как именно строит URL живой браузер при поиске по карте, тем же приёмом, что в #3033/#3034). 2. **Честное имя**: пока гео не работает, счётчики `anchors_total/anchors_done` в `scrape_runs.counters` и слово «якорь» в логах вводят в заблуждение. 3. **Покрытие**: если нужен именно полный город — это `fetch_all_secondary` (комнатность × цена), а не якоря. ## Критерий приёмки Два запроса с разными `geoCoords` дают разные наборы `source_id` (пересечение ≪ 100 %) — либо якорный режим убран, и число запросов свипа падает в ~`anchors_total` раз при том же `unique_fetched`.
bot-backend added the
bug
data
tradein
scrapers
scope/backend
priority/p1
labels 2026-08-21 15:26:42 +00:00
Author
Collaborator

Попробовал снять параметры поиска по карте из живого браузера (как в #3033/#3034) — с этого окружения Авито отдаёт «Доступ ограничен: проблема с IP» ещё на главной выдаче, то есть проверку «какие гео-параметры реально уходят при поиске по карте» можно сделать только с резидентного IP (владельцу с его браузера: открыть /ekaterinburg/kvartiry/prodam/vtorichka, включить карту / выбрать область, снять итоговый URL и XHR к /web/1/… — там и будет рабочая форма гео-фильтра, если она есть).

Пока этого нет, вариант 1 из постановки (один citywide-проход вместо N якорей) — единственный, который можно проверить и принять с прода без новых знаний об Авито.

Попробовал снять параметры поиска по карте из живого браузера (как в #3033/#3034) — с этого окружения Авито отдаёт «Доступ ограничен: проблема с IP» ещё на главной выдаче, то есть проверку «какие гео-параметры реально уходят при поиске по карте» можно сделать только с резидентного IP (владельцу с его браузера: открыть `/ekaterinburg/kvartiry/prodam/vtorichka`, включить карту / выбрать область, снять итоговый URL и XHR к `/web/1/…` — там и будет рабочая форма гео-фильтра, если она есть). Пока этого нет, вариант 1 из постановки (один citywide-проход вместо N якорей) — единственный, который можно проверить и принять с прода без новых знаний об Авито.
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#3043
No description provided.