Этот проект представляет собой парсер данных с сайта Airbnb, разработанный на Python с использованием библиотек Beautiful Soup 4 и Selenium. Собранные данные сохраняются в реляционной базе данных PostgreSQL для последующего анализа.
Парсинг данных Airbnb: Извлекает информацию об объектах недвижимости, включая ID, URL, цены и другие параметры. Хранение данных в PostgreSQL: Организованное хранение данных в реляционной базе данных для удобного доступа и анализа. Автоматическое обновление данных: Обновляет информацию об объектах, которые уже есть в базе данных. Telegram-бот для отчетности: Предоставляет статистику и формирует отчеты в формате EXEL. Аналитика данных: (В разработке) Планируется добавление функциональности для анализа собранных данных.
-
Клонирование репозитория:
git clone <repository_url> cd <repository_name>
-
Настройка окружения:
Создайте файл .env в корневой директории и заполните его переменными окружения, как указано в example-env:
POSTGRES_USER=<username> POSTGRES_PASSWORD=<password> TELEGRAM_TOKEN=<telegram_bot_token>
Переименуйте файл
pg_hba.conf-ex
вpg_hba.conf
. Этот файл ограничивает доступ к базе данных только с локальной машины. -
Сборка и запуск Docker контейнеров:
docker-compose up --build
-
Остановка контейнеров: (После проверки работоспособности)
docker-compose down
-
Запуск скрипта в фоновом режиме:
nohup bash ./cycle_docker.sh &
Этот скрипт перезапускает контейнеры каждые 30 минут для обеспечения надежности.
-
PostgreSQL:
Используется как основная база данных для хранения информации об объектах Airbnb.
-
Telegram Bot:
Предоставляет интерфейс для запроса отчетов и статистики из базы данных. Формирует отчеты в формате EXEL на основе данных из PostgreSQL.
-
Парсер списков объектов:
Парсит списки объектов недвижимости с сайта Airbnb, собирает ID и URL. Диапазон цен: от 10$ до 16 000$ с шагом в 1$. Определяет объекты, которые уже есть в базе данных, и отмечает их для обновления.
-
Парсер объектов:
Извлекает детальную информацию об объектах недвижимости из базы данных (ID и URL). Устанавливает флаги "занято" для обрабатываемых объектов, чтобы избежать конфликтов при параллельном парсинге. Сохраняет полученные данные в отдельной таблице базы данных. Обновляет флаги "не занято" и "пройдено" после завершения обработки объекта.
Идентификация объектов: В качестве уникального идентификатора используется ID объекта с сайта Airbnb и Airdna. Защита от блокировки: Приложение автоматически очищает профили для предотвращения блокировки со стороны Airbnb. Непрерывность работы: Парсер сохраняет текущий диапазон цен, чтобы продолжить работу с того же места в случае остановки.
Интеграция с aiogram: Улучшение взаимодействия с Telegram ботом. Два парсера списков: Один парсер для цен, где мало объектов (для полного охвата). Второй парсер для основного диапазона цен, где больше новых объектов. Логирование приложений: Реализация отдельного логирования с возможностью скачивания логов через Telegram бота. Управление пользователями Telegram бота: Контроль доступа и предоставление админ-прав. Автоматический бэкап базы данных: Регулярное создание бэкапов. Возможность скачивания бэкапов через Telegram бота. Рассматривается возможность восстановления базы данных из файла через Telegram.
- Упрощение изменения HTML-классов и тегов: Для адаптации к изменениям на сайте Airbnb.
Пример окна бота:
Сайт Airbnb "кусается". При длительном парсинге страниц, блокируется доступ к сайту. Решилось автоматическим удалением и созданием новых профилей браузера.