CoderCastrov logo
CoderCastrov
Парсер

Парсинг данных о полетах с использованием Python

Парсинг данных о полетах с использованием Python
просмотров
3 мин чтение
#Парсер

Нердовый способ планирования вашей следующей поездки на выходные

Допустим, мы хотим спланировать нашу следующую поездку на выходные. План состоит в том, чтобы отправиться либо в Милан, либо в Мадрид. Суть в том, что нам на самом деле все равно, мы просто ищем лучший вариант. Это немного похоже на то, что сказал немецкий футболист Анди Мёллер: «Милан или Мадрид, главное, чтобы это была Италия».

На первом этапе мы просто ищем рейс, как обычно. В этом примере мы используем Kayak. Как только мы введем наши критерии поиска и установим несколько дополнительных фильтров, таких как «Без пересадок», мы можем видеть, что интересно URL в нашем браузере соответствующим образом настроен

Мы можем разложить этот URL на разные части: исходный пункт, пункт назначения, дата начала, дата окончания и суффикс, который говорит Kayak искать только прямые соединения и сортировать результаты по цене.

Теперь общая идея заключается в том, чтобы получить информацию, которую мы хотим (например, цена, время отправления и прибытия) из исходного HTML-кода веб-сайта. Для этого мы в основном полагаемся на два пакета. Первый - selenium, который в основном управляет вашим браузером и автоматически открывает веб-сайт. Второй - Beautiful Soup, который помогает нам преобразовать беспорядочный HTML-код в более структурированный и читаемый формат. Из этой «супы» мы позже сможем легко получить интересующую нас информацию.

Итак, приступим. Сначала нам нужно настроить selenium. Для этого нам нужно загрузить драйвер браузера, например ChromeDriver (убедитесь, что он соответствует установленной версии Chrome), который мы должны поместить в ту же папку, что и наш код Python. Теперь мы загружаем несколько пакетов и говорим selenium, что мы хотим использовать ChromeDriver и позволить ему открыть наш URL выше.

После загрузки веб-сайта нам нужно выяснить, как мы можем получить доступ к информации, которая для нас является релевантной. Давайте возьмем, например, время отправления, используя функцию инспектирования нашего браузера, мы видим, что время отправления в 20:55 обернуто в тег span с классом «depart-time base-time».

Если мы теперь передадим HTML-код веб-сайта в BeautifulSoup, мы можем специально искать нужные нам классы. Результаты могут быть извлечены с помощью простого цикла. Поскольку для каждого результата поиска мы получаем набор из двух времен отправления, нам также нужно преобразовать результаты в логические пары времени отправления-прибытия.

Мы используем аналогичный подход для цены. Однако, при инспектировании элемента цены, мы видим, что Kayak предпочитает использовать разные классы для своей информации о цене. Поэтому нам нужно использовать регулярное выражение, чтобы захватить все случаи. Также сама цена дополнительно обернута, поэтому нам нужно использовать несколько дополнительных шагов, чтобы получить ее.

Теперь мы помещаем все в красивую таблицу и получаем

И это практически все. Мы спарсили и привели в порядок всю информацию, которая была запутана в HTML-коде нашего исходного рейса. Основная работа сделана.

Чтобы сделать все немного удобнее, мы теперь можем обернуть наш код выше в функцию и вызывать эту функцию, используя различные комбинации пункта назначения и дня начала для нашего трехдневного путешествия. Отправляя несколько запросов, Kayak иногда может подумать, что мы бот (и кто может их винить), лучший способ позаботиться об этом - постоянно изменять пользовательский агент браузера и также немного ждать между запросами. Наш весь код будет выглядеть так:

После того, как мы указали все комбинации и спарсили соответствующие данные, мы можем красиво визуализировать наши результаты с помощью тепловой карты из seaborn

Так что решено. Следующая остановка: Мадрид! За всего $108 это самый дешевый вариант из трех выходных, которые мы выбрали в сентябре. С нетерпением жду, чтобы попробовать вкусные тапас.