Автоматизируйте скрипт Python, который анализирует цены на отели, расположенные поблизости от Booking.com, и отправляет электронное письмо со списком старых и новых цен.

Предпосылки

  • Python3: класс, функция, цикл For и If-Else, списки (вложенные), словарь;
  • Фрейм данных Pandas;
  • Файловый ввод-вывод;
  • SQL - создание, вставка, замена, удаление;
  • HTML-теги - ‹p›, ‹ol›, ‹li›;
  • CSS
  • AWS EC2 - основные команды Linux
  • AWS RDS - рабочая среда MySQL
  • Веб-браузер: Google Chrome

Постановка задачи

Владельцы / менеджеры гостиничного бизнеса теряют доход, если они остаются невнимательными к ценам на отели своих конкурентов. Если цены не меняются в соответствии с рыночными ставками, это может повлиять на ежедневный доход.

Решение

  1. Сбор данных с веб-сайта booking.com с помощью библиотеки Python selectorlib, которая помогает очистить различные элементы с веб-сайта. Из множества элементов, доступных на веб-странице, мы будем очищать только name и price(US$)
  2. Данные будут периодически извлекаться (с использованием cron), где новые данные будут сравниваться со старыми данными (уже присутствующими в нашей базе данных MySQL).
  3. Если произойдет какое-либо изменение цены, скрипт сгенерирует HTML-таблицу и одновременно отправит электронное письмо на адрес электронной почты владельца в качестве уведомления, чтобы он мог принять ключевые решения.

Разобьем задачу на 2 части

  1. Понимание того, что делает наш скрипт Python;
  2. Настройка сервисов AWS: EC2 и RDS, а также автоматизация нашего скрипта Python на EC2 с помощью заданий cron.

Часть 1

Затем мы напишем код для установления соединения с AWS RDS, который представляет собой не что иное, как службу реляционной базы данных, которая помогает вам управлять базой данных MySQL и масштабировать ее в облаке AWS.

Не волнуйтесь, мы найдем данные о нашем подключении (хост, пользователь, пароль, имя базы данных) при настройке базы данных на AWS RDS.

Первоначально мы будем рассматривать данные, имеющиеся в нашей облачной базе данных, как старые цены, которые необходимо учитывать.

Прочтите эту статью на scrapehero.com, чтобы понять selectorlib библиотеку.

В приведенной выше статье также упоминается файл YAML ›booking.yml, где нам нужны только имя и цена из веб-элементов.

Save the booking.yml file with the python script in same folder

Получить URL

  1. На Booking.com найдите желаемое место
  2. Введите сегодняшнюю дату прибытия и отъезда
  3. Добавьте любой тип фильтров для поиска. Например, 2-звездочные, 3-звездочные отели в радиусе 1 или 2 миль, включая завтрак и любой другой фильтр.
  4. Найдите результат, а затем скопируйте сгенерированный URL (статический) с веб-сайта.

Теперь, чтобы автоматизировать наш скрипт, мы не можем использовать статический URL-адрес, так как он не будет автоматически получать последние значения за каждый день, поэтому мы адаптируем его и сделаем динамическим URL-адресом, указанным ниже.

Наконец, у нас будет два словаря для сравнения:

  1. d_olddata - это были ранее сохраненные данные (имя), существующие в AWS RDS
  2. new_d - недавно полученные данные

Окончательный результат будет содержать название отеля, старую цену и новую цену. Результат будет сохранен в списке latest_value.

Также. мы не хотим отправлять электронные письма, если цены не изменились, для этого мы создадим latest_price список, который будет содержать только список новых цен. Это поможет нам отправить электронное письмо только в случае изменения цен.

Примечание.

  1. Указанный выше адрес электронной почты будет работать только в Gmail. Если вы хотите использовать OUTLOOK, YAHOO и т. Д., Вы можете изменить код, следуя этой статье.
  2. Чтобы начать получать электронные письма в Gmail из вашего скрипта Python, вам необходимо включить доступ для менее безопасных приложений в настройках Gmail. Пожалуйста, следите за этой статьей
  3. Вы можете выбрать разные цветовые темы для финальной HTML-таблицы из библиотеки Python prettyhtmltable.

Заключительный этап

Это наш самый важный шаг, так как он обновит базу данных, а con.commit зафиксирует все запросы SQL в скрипте Python.

Вы можете либо заменять все значения в базе данных каждый раз при получении новых данных, либо создавать новую таблицу для анализа данных и поиска различных тенденций в ценах на отели.

Вывод

После того, как мы завершим все шаги в Части 2, вы начнете получать уведомления по электронной почте о желаемых обрезках в своей учетной записи Gmail.

Браузер для ПК

Мобильное приложение Gmail

Таблица построена в HTML, и они адаптивны, что означает, что они адаптируют все типы размеров экрана, не нарушая формат удобочитаемости.

Часть 2

Предполагая, что у вас уже настроены AWS EC2 и AWS RDS, если на вашем экземпляре не установлены python3 и pip3, сначала установите их.

Шаг 1: установите все зависимости, указанные в 'импорте', используя pip3 на своем экземпляре.

Шаг 2: загрузите скрипт python и файл booking.yml в экземпляр EC2 с помощью git, любого FTP (например, FileZilla) или создайте новый файл с помощью любого редактора, например nano или vi-editor и скопируйте код с локального компьютера в редактор. Ваш каталог должен содержать следующие два файла

Примечание: измените расположение файла booking.yml в скрипте «веб-скрэйпер». вы можете найти местоположение с помощью команды «pwd».

Шаг 3. Установите рабочую среду MySQL на локальный компьютер для создания, управления и мониторинга таблиц в облаке.

Шаг 4. Создайте новую схему с именем таблицы unique_prices или любым другим именем и двумя столбцами с типами данных «text» и «int».

Примечание. Вы можете очистить с веб-страницы не только название и цену, а затем сохранить их в базе данных, добавив дополнительные столбцы.

Шаг 5: Чтобы запустить скрипт в течение определенного периода времени, мы используем кукурузоуборочные работы.

  1. crontab -e: позволяет писать настраиваемые задания cron, где,
  • * * * * *: желаемое время (вы можете узнать их на crontabguru). Например, 0 11 * * * определяет, что скрипт будет выполняться в 11 утра каждый день недели
  • / usr / bin / python3: расположение python в экземпляре EC2 (для вашего экземпляра оно может быть другим)
  • Остальное место предназначено для скрипта Python, который вы хотите выполнить в это конкретное время.

2. crontab -l: предоставляет список существующих заданий по кукурузе.

Я бы посоветовал запустить скрипт python с использованием «python3 file-location / filename.py» на вашем экземпляре EC2, чтобы убедиться, что все зависимости установлены правильно и не вызывает никаких ошибок. После успешного запуска вы можете настроить несколько заданий cron.

Шаг 6. AWS Billing

Всегда следите за своей активностью использования, поскольку AWS, например, предоставляет ограниченные часы, которые мы используем. К счастью, их достаточно, чтобы поддерживать и запускать наш скрипт каждый день. Кроме того, часы использования обновляются каждый месяц, то есть каждый месяц у нас есть 750 часов как AWS EC2, так и AWS RDS. Вы даже можете настроить оповещения, если рабочее время превышает пороговое значение часов использования уровня бесплатного пользования.

Попробуйте проект самостоятельно, вы столкнетесь с множеством проблем, которые помогут вам построить основу для развертывания проектов в облаке, а также помогут вам преодолеть проблемы при использовании любого нового облачного сервиса, отличного от AWS.

Сноски

Весь код загружен в мой репозиторий GitHub, и если у вас есть двойник, пожалуйста, свяжитесь со мной через LinkedIn.

Если кто-то из Booking.com читает эту статью, значит, данные были извлечены только для того, чтобы продемонстрировать возможные применения различных технологий, доступных на рынке, в образовательных целях.

Всегда приветствуются предложения по оптимизации кода или рассмотрению проблемы с разных точек зрения.

Больше контента на plainenglish.io