An open API service indexing awesome lists of open source software.

https://github.com/shliamb/airbnb

Airbnb Scrambler
https://github.com/shliamb/airbnb

airbnb airbnb-scrambler beautifulsoup-parsing beautifulsoup4 python python3 scrambler selenium selenium4

Last synced: about 2 months ago
JSON representation

Airbnb Scrambler

Awesome Lists containing this project

README

          

## RU

---

# Airbnb Data Scraper

## Описание

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

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

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

## Deploy и Запуск

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

```bash
git clone
cd
```

2. Настройка окружения:

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


POSTGRES_USER=
POSTGRES_PASSWORD=
TELEGRAM_TOKEN=

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

```bash
docker-compose up --build
```

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

```bash
docker-compose down
```

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

```bash
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