CoderCastrov logo
CoderCastrov
Парсер

Парсинг информации об отелях с веб-сайта Airbnb с использованием Beautiful Soup

Парсинг информации об отелях с веб-сайта Airbnb с использованием Beautiful Soup
просмотров
3 мин чтение
#Парсер
Website of Airbnb.co.id

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

Airbnb - один из крупных веб-сайтов, предоставляющих услуги по размещению для путешественников. Из-за его большого размера услуга размещения может быть разделена на различные типы, такие как виллы, отели, домики на деревьях, дома в пустыне и многие другие, которые можно увидеть в категориях.

Веб-сайт, конечно, предоставляет много данных об отелях, но архитектура веб-сайта достаточно сложна для новичка. С другой стороны, Airbnb использует различные скрипты для доступа к данным, поэтому процесс парсинга может быть непростым. (помните... я пишу это в январе 2023 года).

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

Первый шаг, который вы должны сделать, - установить необходимые библиотеки, в частности библиотеку beautifulsoup, или вы можете использовать следующий синтаксис:

# Установка beautifulsoup
pip install beautifulsoup4 

Важно отметить, что вы также должны установить другие библиотеки, такие как requests, которые позволят вам отправлять HTTP-запросы и получать HTML-код веб-сайта.

pip install requests

Затем вы будете импортировать другие базовые библиотеки, такие как в коде ниже (если у вас их нет, пожалуйста, сначала установите их).

from bs4 import BeautifulSoup # Beautifulsoup
import requests # для доступа к ссылке

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

Website of Airbnb.co.id

Villa Dewi Laksmi будет одним из примеров, из которого мы возьмем информацию. Самое важное - знать компоненты и имена классов/идентификаторов, которые мы будем извлекать со страницы веб-сайта.

В этом случае я хочу извлечь заголовок со страницы, где заголовок находится в h1 с классом "_fecoyn4". Синтаксис, который вы можете попробовать, выглядит следующим образом:

url = 'https://www.airbnb.co.id/rooms/2046355' # Ссылка на отель
response = requests.get(url) # Отправить запрос на url
soup = BeautifulSoup(response.content, 'html5lib') # Разобрать сайт
title = soup.find('h1',class_='_fecoyn4').text # Взять заголовок 1 на сайте

Но результат будет таким:

Result of the code

Это означает, что объект, который мы пытаемся получить, не удалось успешно получить, потому что говорится, что мы пытаемся получить атрибут 'NoneType'. Если вы попытаетесь напечатать(title), результат также будет пустым.

Что же можно сделать? Мы получим исходный HTML-код веб-сайта. Вы можете использовать следующий синтаксис, чтобы сделать это.

text = soup.get_text()
text # Взять весь текст из html

И результат, который вы получите, будет таким:

All text from html

Конечно, этот исходный HTML-код не будет полезен, если его не использовать. Хитрость, которую можно использовать здесь, - использовать регулярные выражения для извлечения нужной информации (в данном случае мы извлечем заголовок). Первый совет, который можно сделать, - найти ключевое слово, которое мы ищем, в данном случае "Villa Dewi Laksmi", затем выполнить CTRL+F на выводе исходного HTML-кода и найти вышеуказанное предложение, затем вы найдете {"__typename":"PdpTitleSection","title":"Villa Dewi Laksmi"}. Отсюда мы можем создать регулярное выражение, как показано в синтаксисе ниже:

regex = r'"__typename":"PdpTitleSection","title":"(.*?)"'
match = re.search(regex, text)
if match:
    print(match.group(1))

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

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

Поставьте лайк и подпишитесь на меня, если вам понравилась моя статья