fix(tradein): Avito-парсер тащит фото и реальный адрес из DOM #419

Merged
lekss361 merged 1 commit from fix/tradein-avito-photos-address into main 2026-05-22 08:49:37 +00:00
Owner

Проблема

Все объявления Avito приходят без фото (серый блок в «Сводке» для
аналогов Avito) и с адресом-заглушкой «Екатеринбург (Avito)» — это и
есть «парсит кривовато» по Avito.

Причина

Avito парсится через самый слабый путь — DOM-скрейп карточек
(_dom_card_to_lot), потому что mobile API отдаёт бан, а формат
__initialState__ в HTML устарел. А DOM-путь:

  • фото не извлекал вообще,
  • адрес брал мёртвым селектором [class*="geo-address"] (Avito
    перешёл на CSS-модули с хешами) → всегда None → заглушка.

Решение

  • Фото — из <img itemprop="image"> карточки-слайдера, до 5 шт.
  • Адрес — первый <p> внутри data-marker="item-location"
    (улица + дом; второй <p> — метро/район, отбрасываем).

Все селекторы проверены на живой выдаче Avito. Картинки Avito CDN
отдаются без hotlink-защиты (200 image/jpeg), т.е. отрисуются в <img>.

Координаты Avito остаются приблизительными (anchor + jitter) — DOM их
не отдаёт; это отдельная задача.

Следствие: после деплоя и пере-скрейпа аналоги Avito получат фото и
нормальные адреса.

## Проблема Все объявления Avito приходят без фото (серый блок в «Сводке» для аналогов Avito) и с адресом-заглушкой «Екатеринбург (Avito)» — это и есть «парсит кривовато» по Avito. ## Причина Avito парсится через самый слабый путь — DOM-скрейп карточек (`_dom_card_to_lot`), потому что mobile API отдаёт бан, а формат `__initialState__` в HTML устарел. А DOM-путь: - фото не извлекал вообще, - адрес брал мёртвым селектором `[class*="geo-address"]` (Avito перешёл на CSS-модули с хешами) → всегда `None` → заглушка. ## Решение - Фото — из `<img itemprop="image">` карточки-слайдера, до 5 шт. - Адрес — первый `<p>` внутри `data-marker="item-location"` (улица + дом; второй `<p>` — метро/район, отбрасываем). Все селекторы проверены на живой выдаче Avito. Картинки Avito CDN отдаются без hotlink-защиты (200 image/jpeg), т.е. отрисуются в `<img>`. Координаты Avito остаются приблизительными (anchor + jitter) — DOM их не отдаёт; это отдельная задача. Следствие: после деплоя и пере-скрейпа аналоги Avito получат фото и нормальные адреса.
lekss361 added 1 commit 2026-05-22 08:49:26 +00:00
DOM-путь (_dom_card_to_lot) — основной для Avito: mobile API отдаёт
бан, формат __initialState__ устарел, так что почти все объявления
идут через него. Но он не извлекал фото вообще, а адрес брал мёртвым
селектором [class*="geo-address"] — поэтому объявления Avito оставались
без фото (серый блок в Сводке) и с заглушкой «Екатеринбург (Avito)».

Теперь:
- фото — из <img itemprop="image"> карточки-слайдера (до 5 шт);
- адрес — первый <p> внутри data-marker="item-location" (улица + дом).

Селекторы проверены на живой выдаче Avito.
lekss361 merged commit 9713f734d7 into main 2026-05-22 08:49:37 +00:00
Sign in to join this conversation.
No reviewers
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#419
No description provided.