Кейс: Парсинг Booking.com у реальному часі на туристичному сайті
Іноді виникають завдання, коли нам необхідно отримати у значних обсягах дані зі сторінок сайту. І майже завжди при цьому хочеться, щоб цей процес був максимально автоматизованим і дані можна було б без проблем перенести, наприклад, на інший сайт. У цьому випадку нам потрібно написати PHP-парсер – специфічну програму для отримання або збирання будь-якої відкритої інформації з веб-сайтів.
З подібним замовленням до нас звернулися представники однієї туристичної фірми. Їй потрібно отримати дані з найбільшого туристичного агрегатора – парсить сайт в реальному часі.
Провівши аналіз поставленого завдання, наша команда фахівців розпочала розробку.
Парсер на PHP крок за кроком
Технології
Скласти правильний запит та обробити дані нам допомогла бібліотека cURL. Ця бібліотека є більш просунутою альтернативою функції PHP –file_get_contents. На відміну від неї, cURL дозволяє працювати з куками, із заголовками, дозволяє відправляти форми та переходити по редиректах.
Своєрідною особливістю парсингу веб-сайтів є те, що робота відбувається з вихідним HTML-кодом сторінки, але не даними (текстом, зображеннями і т.д.), які можна побачити користувачеві на сайті.
Прототипування
Виходячи з цього, більшість нашої роботи зводиться до правильного виділення необхідних нам елементів “атакованого” сайту. Так ми плавно переходимо до прототипуванню – процесу застосування різних концепцій, архітектурних та/або технологічних рішень у розробці парсера.
Тестування
Коли пройдено попередній етап, час тестувати парсер booking.com! Для цього застосовуємо методику тест кейсів – сукупності кроків, конкретних умов та параметрів, необхідних для перевірки працездатності нашого парсера. Подібним чином ми перевіряємо коректність даних і навантаження коду парсера на сайт, що піддається “атаці”, і нашого ресурсу.
Парсим сайт Booking.com
Після реалізації технічної частини щодо парсера, справа залишається за малим – отримати дані із сайту booking.com.
Запускаємо парсер і чекаємо, поки інструмент збере всі необхідні нам дані. У цьому випадку – кімнати та їх наявність у певний період, а також усі варіанти цін на цей період. Після цього ми експортуємо отримані дані до бази даних сайту нашого туристичного сервісу та насолоджуємось отриманим результатом.
Подивіться скріншоти та порівняйте – ціни на сайті нашого клієнта збігаються з booking.com. І по-іншому бути не може, адже в момент пошуку скрипт на нашому сайті робить парсит потрібні готелі на Букінгу і отримує звідти всі ціни на доступні номери!
Що зрештою?
Иногда возникают задачи, когда нам необходимо получить в значительных объёмах данные со страниц сайта. И почти всегда при этом хочется чтобы этот процесс был максимально автоматизированным и данные можно было бы без проблем перенести, к примеру, на другой сайт. В этом случае нам нужно написать PHP-парсер – специфическую программу для извлечения или сбора любой открытой информации с веб-сайтов.
С подобным заказом к нам обратились представители одной туристической фирмы. Ей требовалось получить данные с крупнейшего туристического агрегатора – парсить сайт в реальном времени.
Проведя анализ поставленной задачи, наша команда специалистов приступила к разработке.
Парсер на PHP шаг за шагом
Технологии
Составить правильный запрос и обработать данные нам помогла библиотека cURL. Эта библиотека является более продвинутой альтернативой функции PHP – file_get_contents. В отличие от нее, cURL позволяет работать с куками, с заголовками, позволяет отправлять формы и переходить по редиректам.
Своеобразной особенностью парсинга веб-сайтов является то, что работа происходит с исходным HTML-кодом страницы, но не данными (текстом, изображениями и т.д.), которые видны пользователю на сайте.
Прототипирование
Исходя из этого, большая часть нашей работы сводится к правильному выделению нужных нам элементов “атакуемого” сайта. Так мы плавно переходим к прототипированию – процессу применения различных концепций, архитектурных и/или технологических решений в разработке парсера.
Тестирование
Когда предыдущий этап пройден, время тестировать парсер booking.com! Для этого применяем методику тест кейсов – совокупности шагов, конкретных условий и параметров, необходимых для проверки работоспособности нашего парсера. Подобным образом мы проверяем корректность получаемых данных и нагрузку кода парсера на сайт, подвергаемый “атаке”, и нашего ресурса.
Парсим сайт Booking.com
После реализации технической части в отношение парсера, дело остаётся за малым – получить данные с сайта booking.com.
Запускаем парсер и ждём, пока инструмент “соберёт” все необходимые нам данные. В данном случае – комнаты и их наличие в определённый период, а также все варианты цен на этот период. После этого мы экспортируем полученные данные в базу данных сайта нашего туристического сервиса и наслаждаемся полученным результатом.
Посмотрите скриншоты и сравните – цены на сайте нашего клиента совпадают с booking.com. И по-другому быть не может, ведь в момент поиска скрипт на “нашем” сайте делает парсит нужные отели на “Букинге” и получает оттуда все цены на доступные номера!
Что в итоге?
Парсер за считанные минуты обойдёт тысячи страниц “атакуемого” ресурса. Он аккуратно и безошибочно отберёт нужное и отбросит лишнее, эффективно упаковав конечные данные в необходимом виде. Этими данными потом можно распорядиться так, как будет угодно. Например, как было в нашем случае, экспортировав информацию о номерах отелей всего мира в единую базу данных.