Skip to content

EduardBardackiy/Avito-Parser

Repository files navigation

Avito Parser - Парсер объявлений с Авито

Программа для парсинга объявлений о сдаче квартир с сайта Авито с возможностью просмотра через Telegram бота. Данный учебный проект написан на Cursor в рамках "Интенсива по вайбкодингу" университета "Zerocoder".

Возможности

  • 🔍 Парсинг объявлений о сдаче квартир с Авито
  • 📸 Извлечение фотографий объявлений
  • 🤖 Telegram бот для просмотра результатов
  • 💾 Сохранение данных в SQLite базу данных
  • ⚙️ Настройка URL для парсинга через бота
  • 🗑️ Очистка базы данных через бота
  • 📊 Статистика базы данных

Установка

  1. Клонируйте репозиторий:

    git clone <repository-url>
    cd "Avito Parser"
  2. Создайте виртуальное окружение:

    python -m venv venv
  3. Активируйте виртуальное окружение:

    • Windows:
      venv\Scripts\activate
    • Linux/Mac:
      source venv/bin/activate
  4. Установите зависимости:

    pip install -r requirements.txt
  5. Настройте переменные окружения: Создайте файл .env в корневой папке:

    TELEGRAM_BOT_TOKEN=your_bot_token_here
    TARGET_URL=https://www.avito.ru/sankt-peterburg/kvartiry/sdam/na_dlitelnyy_srok/2-komnatnye-ASgBAgICA0SSA8gQ8AeQUswIkFk

Использование

1. Запуск парсера

Парсинг с сайта:

python src/main.py fetch

Парсинг из HTML файла:

python src/main.py parse-file --file "path/to/file.html"

Парсинг из папки с HTML файлами:

python src/main.py parse-file --file "path/to/folder"

2. Запуск Telegram бота

python src/main.py bot

3. Команды бота

После запуска бота отправьте команду /start в Telegram.

Основные команды:

  • /start - Запуск бота и показ главного меню
  • 📋 Журнал - Просмотр последних объявлений
  • ⚙ Настройки - Настройки бота

Меню настроек:

  • 🌐 Изменить URL парсинга - Изменить URL для парсинга
  • 🗑 Очистить базу данных - Очистить все данные
  • 📊 Статистика БД - Показать статистику базы данных

Навигация в журнале:

  • ◀️ Назад - Предыдущая страница
  • ▶️ Вперед - Следующая страница
  • 🔙 Назад - Вернуться в главное меню

Структура проекта

Avito Parser/
├── src/
│   └── main.py              # Основной файл программы
├── core/
│   └── parser.py            # Логика парсинга
├── database/
│   ├── db.py               # Настройки базы данных
│   └── models.py           # Модели данных
├── bot/
│   └── runner.py           # Telegram бот
├── config/
│   └── settings.py         # Настройки приложения
├── utils/
│   ├── logger.py           # Система логирования
│   └── helpers.py          # Вспомогательные функции
├── logs/                   # Папка с логами
├── Trash/                  # Папка с сохраненными HTML файлами
├── .env                    # Переменные окружения
├── requirements.txt        # Зависимости Python
└── README.md              # Этот файл

Настройка

Переменные окружения (.env)

# Токен Telegram бота (обязательно)
TELEGRAM_BOT_TOKEN=your_bot_token_here

# URL для парсинга (по умолчанию - 2-комнатные квартиры в СПб)
TARGET_URL=https://www.avito.ru/sankt-peterburg/kvartiry/sdam/na_dlitelnyy_srok/2-komnatnye-ASgBAgICA0SSA8gQ8AeQUswIkFk

# User-Agent для запросов (опционально)
USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36

# Путь к файлу со списком User-Agent (опционально)
USER_AGENT_LIST_PATH=user_agents.txt

Создание Telegram бота

  1. Найдите @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Следуйте инструкциям для создания бота
  4. Скопируйте полученный токен в файл .env

Примеры использования

Парсинг конкретного URL

  1. Измените URL в файле .env:

    TARGET_URL=https://www.avito.ru/moskva/kvartiry/sdam/na_dlitelnyy_srok/1-komnatnye-ASgBAgICA0SSA8gQ8AeQUswIkFk
  2. Запустите парсинг:

    python src/main.py fetch

Парсинг из сохраненного HTML

  1. Сохраните HTML страницу Авито в файл
  2. Запустите парсинг:
    python src/main.py parse-file --file "saved_page.html"

Изменение URL через бота

  1. Запустите бота:

    python src/main.py bot
  2. В Telegram:

    • Отправьте /start
    • Нажмите ⚙ Настройки
    • Нажмите 🌐 Изменить URL парсинга
    • Введите новый URL

Логирование

Программа ведет подробные логи в папке logs/:

  • bot.log - Логи Telegram бота
  • parser.log - Логи парсера
  • cli.log - Логи командной строки

База данных

Данные сохраняются в SQLite базу database.db со следующей структурой:

Таблица parsed_listings:

  • id - Уникальный идентификатор
  • url - Ссылка на объявление
  • title - Заголовок объявления
  • price - Цена
  • price_value - Цена в числовом формате
  • bail - Информация о залоге
  • tax - Информация о комиссии
  • services - Информация об услугах
  • address - Адрес
  • description - Описание
  • images_json - JSON с URL изображений
  • created_at - Дата создания записи

Устранение неполадок

Бот не отвечает

  1. Проверьте токен бота в файле .env
  2. Убедитесь, что бот запущен: python src/main.py bot
  3. Проверьте логи в logs/bot.log

Парсер не находит объявления

  1. Проверьте URL в файле .env
  2. Убедитесь, что сайт Авито доступен
  3. Проверьте логи в logs/parser.log

Нет изображений в объявлениях

Программа автоматически извлекает изображения из JSON-LD данных. Если изображения не отображаются:

  1. Проверьте, что URL содержит объявления с фотографиями
  2. Убедитесь, что используется последняя версия парсера
  3. Проверьте логи парсера на наличие ошибок

Ошибки базы данных

  1. Удалите файл database.db для сброса базы данных
  2. Перезапустите программу для создания новой базы

Производительность

  • Парсинг: ~100-150 объявлений за раз
  • Изображения: 56% объявлений содержат фотографии
  • База данных: SQLite, быстрый доступ к данным
  • Telegram бот: Поддержка пагинации для больших объемов данных

Безопасность

  • Используйте виртуальное окружение Python
  • Не публикуйте токен бота в открытом доступе
  • Регулярно обновляйте зависимости
  • Следите за логами на предмет подозрительной активности

Поддержка

При возникновении проблем:

  1. Проверьте логи в папке logs/
  2. Убедитесь, что все зависимости установлены
  3. Проверьте настройки в файле .env
  4. Убедитесь, что используете актуальную версию Python (3.8+)

Лицензия

Этот проект предназначен для образовательных целей. Соблюдайте правила использования сайта Авито и не нарушайте их условия использования.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors