Skip to content

shliamb/airbnb

Repository files navigation

RU


Airbnb Data Scraper

Описание

Этот проект представляет собой парсер данных с сайта Airbnb, разработанный на Python с использованием библиотек Beautiful Soup 4 и Selenium. Собранные данные сохраняются в реляционной базе данных PostgreSQL для последующего анализа.

Функциональность

Парсинг данных Airbnb: Извлекает информацию об объектах недвижимости, включая ID, URL, цены и другие параметры. Хранение данных в PostgreSQL: Организованное хранение данных в реляционной базе данных для удобного доступа и анализа. Автоматическое обновление данных: Обновляет информацию об объектах, которые уже есть в базе данных. Telegram-бот для отчетности: Предоставляет статистику и формирует отчеты в формате EXEL. Аналитика данных: (В разработке) Планируется добавление функциональности для анализа собранных данных.

Deploy и Запуск

  1. Клонирование репозитория:

    git clone <repository_url>
    cd <repository_name>
  2. Настройка окружения:

    Создайте файл .env в корневой директории и заполните его переменными окружения, как указано в example-env:

    POSTGRES_USER=<username>
    POSTGRES_PASSWORD=<password>
    TELEGRAM_TOKEN=<telegram_bot_token>
    

    Переименуйте файл pg_hba.conf-ex в pg_hba.conf. Этот файл ограничивает доступ к базе данных только с локальной машины.

  3. Сборка и запуск Docker контейнеров:

    docker-compose up --build
  4. Остановка контейнеров: (После проверки работоспособности)

    docker-compose down
  5. Запуск скрипта в фоновом режиме:

    nohup bash ./cycle_docker.sh &

    Этот скрипт перезапускает контейнеры каждые 30 минут для обеспечения надежности.

Архитектура и Логика Работы

  1. PostgreSQL:

    Используется как основная база данных для хранения информации об объектах Airbnb.

  2. Telegram Bot:

    Предоставляет интерфейс для запроса отчетов и статистики из базы данных. Формирует отчеты в формате EXEL на основе данных из PostgreSQL.

  3. Парсер списков объектов:

    Парсит списки объектов недвижимости с сайта Airbnb, собирает ID и URL. Диапазон цен: от 10$ до 16 000$ с шагом в 1$. Определяет объекты, которые уже есть в базе данных, и отмечает их для обновления.

  4. Парсер объектов:

    Извлекает детальную информацию об объектах недвижимости из базы данных (ID и URL). Устанавливает флаги "занято" для обрабатываемых объектов, чтобы избежать конфликтов при параллельном парсинге. Сохраняет полученные данные в отдельной таблице базы данных. Обновляет флаги "не занято" и "пройдено" после завершения обработки объекта.

Детали Реализации

Идентификация объектов: В качестве уникального идентификатора используется ID объекта с сайта Airbnb и Airdna. Защита от блокировки: Приложение автоматически очищает профили для предотвращения блокировки со стороны Airbnb. Непрерывность работы: Парсер сохраняет текущий диапазон цен, чтобы продолжить работу с того же места в случае остановки.

Планы на Будущее

Интеграция с aiogram: Улучшение взаимодействия с Telegram ботом. Два парсера списков: Один парсер для цен, где мало объектов (для полного охвата). Второй парсер для основного диапазона цен, где больше новых объектов. Логирование приложений: Реализация отдельного логирования с возможностью скачивания логов через Telegram бота. Управление пользователями Telegram бота: Контроль доступа и предоставление админ-прав. Автоматический бэкап базы данных: Регулярное создание бэкапов. Возможность скачивания бэкапов через Telegram бота. Рассматривается возможность восстановления базы данных из файла через Telegram.

  • Упрощение изменения HTML-классов и тегов: Для адаптации к изменениям на сайте Airbnb.

Примеры:

Пример окна бота:

Airbnb

Сайт Airbnb "кусается". При длительном парсинге страниц, блокируется доступ к сайту. Решилось автоматическим удалением и созданием новых профилей браузера.

Airbnb