Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Avito Max Parser

Фоновый мониторинг поисковых выдач Avito.ru: собирает объявления, отсеивает дубли, считает скоринг выгодности лота (0–100) и присылает уведомления по хорошим находкам в Telegram. Есть веб-панель для управления поисками и просмотра каталога.

Изначально писал для себя, чтобы не листать Avito руками в поисках техники с адекватной ценой — дальше обросло веб-интерфейсом, экспортом и опциональной прослойкой с LLM.

Как это устроено

Сбор идёт двумя движками на выбор:

  • curl_cffi — быстрый HTTP-клиент с эмуляцией TLS/JA3 отпечатка браузера, без запуска Chromium;
  • Playwright (headless Chromium) — для страниц, где обычный HTTP-запрос упирается в защиту Avito.

Оба пишут в одну и ту же модель объявления (parser_core.py), дальше всё общее: дедуп по хэшу от заголовка/цены/описания (database.py), скоринг, экспорт, уведомления.

Данные хранятся в SQLite (через aiosqlite, WAL-режим). Отдельных внешних БД не требуется.

Скоринг сделки

Каждому объявлению считается число от 0 до 100 (ai_scoring.py, чистая математика, без ИИ):

  • цена относительно медианы по текущей выдаче — до 45 баллов;
  • продавец: верификация, рейтинг, число отзывов — до 20;
  • качество объявления: количество фото, заполненность характеристик, длина описания — до 15;
  • Авито Доставка и указанная локация — до 10;
  • снижение цены продавцом относительно старой цены — до 10;
  • свежесть объявления — небольшой бонус за первые часы публикации, штраф за то, что висит больше двух недель при цене ниже рынка;
  • штраф до −30 баллов, если в тексте находятся маркеры риска: «на запчасти», «разбит», «не включается», блокировка iCloud, «копия/реплика» и т.п. — список паттернов зашит в коде, плюс можно добавлять свои правила (штрафы и бонусы) через веб-панель.

По итоговому баллу лот попадает в одну из четырёх категорий: GEM (85+), HOT (70–84), FAIR (50–69), CAUTION (ниже 50).

Отдельно и опционально — вердикт от LLM. Выключен по умолчанию (AI_SETTINGS.enabled = false), включается в настройках. Поддерживается любой OpenAI-совместимый эндпоинт: DeepSeek, OpenAI, OpenRouter или локальная Ollama — модуль просто шлёт /chat/completions с карточкой товара и просит два-три предложения: выгода, риски, рекомендация (брать/торговаться/пропустить).

Telegram-бот

На aiogram 3, работает с той же базой, что и веб-панель. Команды:

  • /add <название> <ссылка на поиск> — добавить поисковый запрос для мониторинга;
  • /list — список активных поисков с кнопками;
  • /del <id> — удалить поиск;
  • /blacklist [имя] — чёрный список продавцов;
  • /check — проверить все поиски прямо сейчас, не дожидаясь интервала;
  • /status — статистика по базе;
  • /settings — порог скоринга для уведомлений (все / только HOT+ / только GEM), тихие часы, фильтр по Авито Доставке;
  • /export — выгрузка базы в Excel прямо в чат.

Веб-панель

FastAPI + Jinja2, авторизация по логину/паролю с сессионными cookie (HttpOnly), пароль хранится как PBKDF2-HMAC-SHA256 (100 000 итераций) с солью. При первом запуске создаётся пользователь admin / admin123 — это нужно сменить сразу после первого входа, README не делает это за вас.

В панели: каталог с фильтрами и сеткой/таблицей, управление поисковыми запросами и прокси, живые логи через WebSocket, ручной парсинг по ссылке на объявление, экспорт в Excel / CSV / JSON и отдельный HTML-отчёт.

Прокси

Опционально. Список прокси в proxies.txt (по одному на строку, http://, socks5:// или host:port:user:pass) либо один прокси через DEFAULT_PROXY в .env. При включении (PROXY_ENABLED=true) запросы идут через ротацию списка.

Установка

Windows

Нужен Python 3.10+ с галочкой "Add Python to PATH".

install_windows.bat

Скрипт создаёт venv, ставит зависимости из requirements.txt, докачивает Chromium для Playwright и копирует .env.example в .env. Дальше — start_server.bat (веб-панель), start_telegram_bot.bat (бот) или start_all.bat (оба сразу).

Ubuntu / Debian

git clone https://github.com/domovoyproj/avito-parser.git
cd avito-parser
chmod +x install_ubuntu.sh setup_systemd.sh
sudo ./install_ubuntu.sh

Ставит системные библиотеки для headless Chromium, venv, зависимости и сам Chromium. Для постоянной работы фоном есть setup_systemd.sh — поднимает два юнита, avito-parser (веб) и avito-bot:

sudo systemctl status avito-parser
sudo systemctl restart avito-bot
sudo journalctl -u avito-parser -f

Docker

cp .env.example .env
docker compose up -d --build

docker-compose.yml поднимает два контейнера на одном образе (mcr.microsoft.com/playwright/python с уже установленным Chromium): web — веб-панель на порту 8000, bot — Telegram-бот. Общие тома ./data, ./exports, ./logs.

Настройка (.env)

Переменная По умолчанию Что делает
WEB_HOST / WEB_PORT 0.0.0.0 / 8000 адрес веб-панели
TELEGRAM_BOT_TOKEN токен от @BotFather; без него бот не запустится
TELEGRAM_ADMIN_IDS ID пользователей через запятую, у кого есть доступ к боту
NOTIFICATION_INTERVAL_MIN 10 как часто проверять поиски, минимум 1 минута
SCRAPER_HEADLESS true headless-режим Chromium (на сервере — только так)
SCRAPER_TIMEOUT_MS 45000 таймаут загрузки страницы
SCRAPER_PAGE_DELAY_MIN/MAX 2.0 / 5.0 случайная пауза между запросами, сек
PROXY_ENABLED / DEFAULT_PROXY false / — см. раздел про прокси
AI_PROVIDER deepseek deepseek / openai / openrouter / ollama
AI_API_KEY / AI_MODEL / AI_API_BASE ключ и модель для LLM-вердикта, если он включён

Остальные настройки (тихие часы, пороги скоринга, чёрный список, кастомные правила скоринга) хранятся в базе и правятся из веб-панели или бота, а не через .env.

Стек

Python 3.10+, FastAPI, Playwright, curl_cffi, aiogram 3, aiosqlite, openpyxl.

About

⚡ Профессиональный автономный комбайн мониторинга, парсинга и нейросетевой оценки выгодности лотов Авито с веб-панелью и Telegram-ботом

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages