Программа для парсинга объявлений о сдаче квартир с сайта Авито с возможностью просмотра через Telegram бота. Данный учебный проект написан на Cursor в рамках "Интенсива по вайбкодингу" университета "Zerocoder".
- 🔍 Парсинг объявлений о сдаче квартир с Авито
- 📸 Извлечение фотографий объявлений
- 🤖 Telegram бот для просмотра результатов
- 💾 Сохранение данных в SQLite базу данных
- ⚙️ Настройка URL для парсинга через бота
- 🗑️ Очистка базы данных через бота
- 📊 Статистика базы данных
-
Клонируйте репозиторий:
git clone <repository-url> cd "Avito Parser"
-
Создайте виртуальное окружение:
python -m venv venv
-
Активируйте виртуальное окружение:
- Windows:
venv\Scripts\activate
- Linux/Mac:
source venv/bin/activate
- Windows:
-
Установите зависимости:
pip install -r requirements.txt
-
Настройте переменные окружения: Создайте файл
.envв корневой папке:TELEGRAM_BOT_TOKEN=your_bot_token_here TARGET_URL=https://www.avito.ru/sankt-peterburg/kvartiry/sdam/na_dlitelnyy_srok/2-komnatnye-ASgBAgICA0SSA8gQ8AeQUswIkFk
Парсинг с сайта:
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"python src/main.py botПосле запуска бота отправьте команду /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 # Этот файл
# Токен 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- Найдите @BotFather в Telegram
- Отправьте команду
/newbot - Следуйте инструкциям для создания бота
- Скопируйте полученный токен в файл
.env
-
Измените URL в файле
.env:TARGET_URL=https://www.avito.ru/moskva/kvartiry/sdam/na_dlitelnyy_srok/1-komnatnye-ASgBAgICA0SSA8gQ8AeQUswIkFk
-
Запустите парсинг:
python src/main.py fetch
- Сохраните HTML страницу Авито в файл
- Запустите парсинг:
python src/main.py parse-file --file "saved_page.html"
-
Запустите бота:
python src/main.py bot
-
В 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- Дата создания записи
- Проверьте токен бота в файле
.env - Убедитесь, что бот запущен:
python src/main.py bot - Проверьте логи в
logs/bot.log
- Проверьте URL в файле
.env - Убедитесь, что сайт Авито доступен
- Проверьте логи в
logs/parser.log
Программа автоматически извлекает изображения из JSON-LD данных. Если изображения не отображаются:
- Проверьте, что URL содержит объявления с фотографиями
- Убедитесь, что используется последняя версия парсера
- Проверьте логи парсера на наличие ошибок
- Удалите файл
database.dbдля сброса базы данных - Перезапустите программу для создания новой базы
- Парсинг: ~100-150 объявлений за раз
- Изображения: 56% объявлений содержат фотографии
- База данных: SQLite, быстрый доступ к данным
- Telegram бот: Поддержка пагинации для больших объемов данных
- Используйте виртуальное окружение Python
- Не публикуйте токен бота в открытом доступе
- Регулярно обновляйте зависимости
- Следите за логами на предмет подозрительной активности
При возникновении проблем:
- Проверьте логи в папке
logs/ - Убедитесь, что все зависимости установлены
- Проверьте настройки в файле
.env - Убедитесь, что используете актуальную версию Python (3.8+)
Этот проект предназначен для образовательных целей. Соблюдайте правила использования сайта Авито и не нарушайте их условия использования.