Как скопировать Airbnb: руководство 2025 года

Узнайте, как выполнять веб-скрейпинг Airbnb, и о инструментах Веб-скрейпинга Bright Data, которые упрощают этот процесс.
6 мин. чтения
How to Scrape Airbnb

Это руководство поможет вам вручную извлечь общедоступные данные из Airbnb с помощью Python. Собранные данные могут помочь проанализировать рыночные тенденции, разработать конкурентоспособные ценовые стратегии, провести анализ настроений по отзывам гостей или создать системы рекомендаций.

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

Как извлечь данные из Airbnb

Прежде чем приступить к работе, рекомендуется иметь базовые знания о Веб-скрейпинге и HTML. Кроме того, убедитесь, что на вашем компьютере установлен Python, если он еще не установлен.Официальное руководство по Pythonсодержит подробные инструкции о том, как это сделать. Если Python уже установлен, убедитесь, что он обновлен до версии Python 3.7.9 или более поздней. Мы также рекомендуем прочитать полное руководство по Веб-скрейпингу Python перед началом работы.

После установки Python запустите терминал или интерфейс командной строки и начните создание нового каталога проекта с помощью следующих команд:

mkdir airbnb-parser && cd airbnb-parser

После создания нового каталога проекта вам необходимо настроить несколько дополнительных библиотек, которые вы будете использовать для Веб-скрейпинга. В частности, вы будете использовать Requests, библиотеку, позволяющую выполнять HTTP-запросы в Python; pandas, надежную библиотеку, предназначенную для манипулирования и анализа данных; Beautiful Soup (BS4) для разбора HTML-контента; и Playwright для автоматизации задач, основанных на браузере.

Чтобы установить эти библиотеки, откройте терминал или оболочку и выполните следующие команды:

  pip3 install beautifulsoup4
   pip3 install requests
   pip3 install pandas
   pip3 install playwright
   playwright install

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

Примеча ние: последняя команда ( playwright install) необходима для установки бинарных файлов браузера.

Структура Airbnb и объекты данных

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

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

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

Чтобы понять структуру HTML веб-сайта Airbnb, выполните следующие действия:

  1. Перейдите на веб-сайт Airbnb.
  2. Введите желаемое местоположение, диапазон дат и количество гостей в строку поиска и нажмите Enter.
  3. Запустите инструменты разработчика браузера, щелкнув правой кнопкой мыши по карточке объекта недвижимости и выбрав «Проверить».
  4. Изучите HTML-макет, чтобы найти теги и атрибуты, которые содержат данные, которые вы хотите скопировать.

Сбор данных из объявления Airbnb

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

Создайте новый скрипт Python, airbnb_scraper.py, и добавьте следующий код:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd

async def scrape_airbnb():
   async with async_playwright() as pw:
       # Запустить новый браузер
       browser = await pw.chromium.launch(headless=False)
       page = await browser.new_page()
       # Перейти по URL Airbnb
       await page.goto('https://www.airbnb.com/s/homes', timeout=600000)
       # Подождите, пока загрузятся списки
       await page.wait_for_selector('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       # Извлеките информацию
       results = []
       listings = await page.query_selector_all('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       for listing in listings:
           result = {}
           # Название объекта недвижимости
           name_element = await listing.query_selector('div[data-testid="listing-card-title"]')
           if name_element:
               result['property_name'] = await page.evaluate("(el) => el.textContent", name_element)
           else:
               result['property_name'] = 'N/A'
           # Местоположение
           location_element = await listing.query_selector('div[data-testid="listing-card-subtitle"]')
           result['location'] = await location_element.inner_text() if location_element else 'N/A'
           # Цена
           price_element = await listing.query_selector('div._1jo4hgw')
           result['price'] = await price_element.inner_text() if price_element else 'N/A'
           results.append(result)
      
       # Закрыть браузер
       await browser.close()
      
       return results
# Запустить парсер и сохранить результаты в файл CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings.csv', index=False)

Функция scrape_airbnb() асинхронно открывает браузер, переходит на страницу списка объявлений Airbnb и собирает такие данные, как название объекта, местоположение и цена из каждого объявления. Если элемент не найден, он помечается как N/A. После обработки полученные данные хранятся в DataFrame pandas и сохраняются в файле CSV с именем airbnb_listings.csv.

Чтобы запустить скрипт, выполните python3 airbnb_scraper.py в терминале или оболочке. Ваш CSV-файл должен выглядеть следующим образом:

property_name,location,price
"Brand bei Bludenz, Austria",343 kilometers away,"€ 2,047 
night"
"Saint-Nabord, France",281 kilometers away,"€ 315 
night"
"Kappl, Austria",362 kilometers away,"€ 1,090 
night"
«Фрейзан, Франция», 394 километра, «181 евро 
за ночь»
«Ланиц-Хассель-Таль, Германия», 239 километров, «185 евро 
за ночь»
«Хогентаннен, Швейцария», 291 километр, «189 евро 
за ночь»
…вывод опущен…

Улучшите Веб-скрейпинг с помощью прокси Bright Data

Сбор данных с веб-сайтов иногда может сопровождаться такими проблемами, как блокировка IP-адресов и геоблокировка. В этом случае проксиBright Data приходят на помощь, позволяя обойти эти препятствия и улучшить качество сбора данных.

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

Чтобы смягчить связанные с этим проблемы, практичным подходом является использование прокси для сбора данных. Вот некоторые из преимуществ использования прокси для Веб-скрейпинга:

  • обход IP-ограничений
  • ротация IP-адресов
  • Балансировка нагрузки обеспечивает распределение сетевого или прикладного трафика по многим ресурсам, предотвращая возникновение узких мест в отдельных компонентах и обеспечивая избыточность на случай сбоев.

Как интегрировать прокси Bright Data в ваш скрипт Python

Учитывая вышеупомянутые преимущества, становится понятно, почему кто-то может захотеть включить прокси Bright Data в скрипт Python. Хорошая новость заключается в том, что это легко сделать. Для этого нужно просто создать учетную запись Bright Data, настроить параметры прокси, а затем реализовать их в коде Python.

Для начала вам нужно создать учетную запись Bright Data. Для этого перейдите на веб-сайт Bright Data и выберите «Пробная версия», а затем следуйте инструкциям.

Войдите в свою учетную запись Bright Data и нажмите на значок кредитной карты в левой панели навигации, чтобы перейти в раздел «Биллинг». Здесь вам нужно ввести предпочтительный способ оплаты, чтобы активировать свою учетную запись:

Затем нажмите на значок булавки в левой панели навигации, чтобы перейти на страницу «Прокси и Скрейпинг-инфраструктура», а затем нажмите «Добавить» > «Резидентные прокси»:

Назовите свой прокси (например, residential_proxy1) и выберите опцию «Общий» в поле «Тип IP». Затем нажмите «Добавить»:

После создания резидентного прокси запишите параметры доступа, так как вам понадобятся эти данные в коде:

Чтобы использовать Резидентный прокси Bright Data, вам необходимо настроить сертификат для вашего браузера. Инструкции по установке сертификата вы найдете в этом руководстве Bright Data.

Создайте новый скрипт Python airbnb_scraping_proxy.py и добавьте следующий код:

from playwright.sync_api import sync_playwright
import pandas as pd

def run(playwright):
   browser = playwright.chromium.launch()
   context = browser.new_context()

   # Настройка прокси
   proxy_username='YOUR_BRIGHTDATA_PROXY_USERNAME'
   proxy_password='YOUR_BRIGHTDATA_PROXY_PASSWORD'
   proxy_host = 'YOUR_BRIGHTDATA_PROXY_HOST'
   proxy_auth=f'{proxy_username}:{proxy_password}'
   proxy_server = f'http://{proxy_auth}@{proxy_host}'

   context = browser.new_context(proxy={
       'server': proxy_server,
       'username': proxy_username,
       'password': proxy_password
   })

   page = context.new_page()
   page.goto('https://www.airbnb.com/s/homes')

   # Подождите, пока страница загрузится
   page.wait_for_load_state("networkidle")

   # Извлеките данные
   results = page.eval_on_selector_all('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr', '''(listings) => {
       return listings.map(listing => {
           return {
               property_name: listing.querySelector('div[data-testid="listing-card-title"]')?.innerText || 'N/A',
               location: listing.querySelector('div[data-testid="listing-card-subtitle"]')?.innerText || 'N/A',
               price: listing.querySelector('div._1jo4hgw')?.innerText || 'N/A'
           }
       })
   }''')

   df = pd.DataFrame(results)
   df.to_csv('airbnb_listings_scraping_proxy.csv', index=False)

   # Закрыть браузер
   browser.close()

with sync_playwright() as playwright:
   run(playwright)

Этот код использует библиотеку Playwright для запуска браузера Chromium с определенным прокси-сервером. Он переходит на главную страницу Airbnb, извлекает из списка объявлений такие данные, как названия объектов недвижимости, их местоположение и цены, а затем сохраняет эти данные в файл CSV с помощью pandas. После извлечения данных браузер закрывается.

Примечание: замените proxy_username, proxy_password и proxy_host на свои параметры доступа Bright Data.

Чтобы запустить скрипт, выполните python3 airbnb_scraping_proxy.py в терминале или оболочке. Извлеченные данные сохраняются в файле CSV с именем airbnb_listings_scraping_proxy.csv. Ваш файл CSV должен выглядеть следующим образом:

property_name,location,price
"Sithonia, Greece",Lagomandra,"$3,305 
night"
"Apraos, Greece","1,080 kilometers away","$237 
night"
«Магнисия, Греция», Милопотамос Паралимпик, «200 долларов 
за ночь»
«Вурвуру, Греция», 861 километр, «357 долларов 
за ночь»
«Ровис, Греция», «1019 километров», «1077 долларов 
за ночь»
…вывод опущен…

Сбор данных с Airbnb с помощью Браузера для скрейпинга Bright Data

Процесс сбора данных можно сделать еще более эффективным с помощью Браузера для скрейпинга Bright Data Scraping Browser. Этот инструмент специально разработан для Веб-скрейпинга и предоставляет ряд преимуществ, включая автоматическую разблокировку, простое масштабирование и обход программного обеспечения для обнаружения ботов.

Перейдите на панель управления Bright Data и нажмите на значок булавки, чтобы перейти на страницу «Прокси и скрейпинг-инфраструктура»; затем нажмите «Добавить» > «Браузер для скрейпинга»:

How to scrape Airbnb 2023 guide

Назовите его (например, scraping_browser) и нажмите «Добавить»:

Затем выберите «Параметры доступа » и запишите свое имя пользователя, хост и пароль — эти данные понадобятся позже в этом руководстве:

После выполнения этих шагов создайте новый скрипт Python с именем airbnb_scraping_brower.py и добавьте следующий код:

import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd

username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_HOST'
browser_url = f'wss://{auth}@{host}'

async def scrape_airbnb():
   async with async_playwright() as pw:
       # Запустить новый браузер
       print('connecting')
       browser = await pw.chromium.connect_over_cdp(browser_url)
       print('подключено')
       page = await browser.new_page()
       # Перейти к URL Airbnb
       await page.goto('https://www.airbnb.com/s/homes', timeout=120000)
       print('готово, оценка')
       # Получить весь HTML-контент
       html_content = await page.evaluate('()=>document.documentElement.outerHTML')

       # Разбор HTML с помощью Beautiful Soup
       soup = BeautifulSoup(html_content, 'html.parser')

       # Извлечение информации
       results = []
       listings = soup.select('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       for listing in listings:
           result = {}
           # Название объекта недвижимости
           name_element = listing.select_one('div[data-testid="listing-card-title"]')
           result['property_name'] = name_element.text if name_element else 'N/A'
           # Местоположение
           location_element = listing.select_one('div[data-testid="listing-card-subtitle"]')
           result['location'] = location_element.text if location_element else 'N/A'
           # Цена
           price_element = listing.select_one('div._1jo4hgw')
           result['price'] = price_element.text if price_element else 'N/A'
           results.append(result)

       # Закрыть браузер
       await browser.close()
      
       return results

# Запустить скрейпер и сохранить результаты в файл CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings_scraping_browser.csv', index=False)

Этот код использует прокси Bright Data для подключения к браузеру Chromium и сбора сведений о недвижимости (т. е. название, местоположение и цена) с сайта Airbnb. Полученные данные хранятся в списке, затем сохраняются в DataFrame и экспортируются в файл CSV с именем airbnb_listings_scraping_browser.csv.

Примечание: не забудьте заменить имя пользователя, пароль и хост на свои параметры доступа Bright Data.

Запустите код из терминала или оболочки:

python3 airbnb_scraping_browser.py 

Вы должны увидеть новый CSV-файл с именем airbnb_listings_scraping_browser.csv, созданный в вашем проекте. Файл должен выглядеть следующим образом:

property_name,location,price
"Benton Harbor, Michigan",Round Lake,"$514 
night"
"Pleasant Prairie, Wisconsin",Lake Michigan,"$366 
night"
"New Buffalo, Michigan",Lake Michigan,"$2,486 
night"
"Фокс-Лейк, Иллинойс", Нипперсинк-Лейк, "199 
долларов за ночь"
"Сейлем, Висконсин", Хукер-Лейк, "880 
долларов за ночь"
...вывод опущен...

Теперь соберите некоторые данные, относящиеся к одному объявлению. Создайте новый скрипт Python, airbnb_scraping_single_listing.py, и добавьте следующий код:

import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_HOST'
browser_url = f'wss://{auth}@{host}'
async def scrape_airbnb_listing():
    async with async_playwright() as pw:
        # Запустить новый браузер
        print('connecting')
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('подключено')
        page = await browser.new_page()
        # Перейти по URL-адресу Airbnb
        await page.goto('https://www.airbnb.com/rooms/26300485', timeout=120000)
        print('done, evaluating')
        # Подождите, пока загрузится контент
        await page.wait_for_selector('div.tq51prx.dir.dir-ltr h2')
        # Получите весь HTML-контент
        html_content = await page.evaluate('()=>document.documentElement.outerHTML')
        # Разбор HTML с помощью Beautiful Soup
        soup = BeautifulSoup(html_content, 'html.parser')
        # Извлечение имени хоста
        host_div = soup.select_one('div.tq51prx.dir.dir-ltr h2')
        host_name = host_div.text.split("hosted by ")[-1] if host_div else 'N/A'
        print(f'Имя хоста: {host_name}')
        # Извлечение отзывов
        reviews_span = soup.select_one('span._s65ijh7 button')
        reviews = reviews_span.text.split(" ")[0] if reviews_span else 'N/A'
        print(f'Отзывы: {reviews}')
        # Закрыть браузер
        await browser.close()
        return {
            'host_name': host_name,
            'reviews': reviews,
        }
# Запустить парсер и сохранить результаты в файл CSV
results = asyncio.run(scrape_airbnb_listing())
df = pd.DataFrame([results]) # results теперь является словарем
df.to_csv('scrape_airbnb_listing.csv', index=False)

В этом коде вы переходите к URL-адресу нужного объявления, извлекаете HTML-содержимое, выполняете парсинг с помощью Beautiful Soup, чтобы получить имя хозяина и количество отзывов, и, наконец, сохраняете извлеченные данные в файл CSV с помощью pandas.

Запустите код из терминала или оболочки:

python3 airbnb_scraping_single_listing.py 

В вашем проекте должен появиться новый CSV-файл с именем scrape_airbnb_listing.csv. Содержимое этого файла должно выглядеть следующим образом:

host_name,reviews
Amelia,88

Весь код для этого урока доступен в этом репозитории GitHub.

Преимущества использования браузера для скрейпинга Bright Data

Есть несколько причин, по которым вам стоит выбрать Браузер для скрейпинга Bright Data вместо локальной версии Chromium. Вот некоторые из них:

  • Автоматическое разблокирование: Браузер для скрейпинга Bright Data Scraping Browser автоматически обрабатывает CAPTCHA, заблокированные страницы и другие препятствия, которые веб-сайты используют для сдерживания скрейперов. Это значительно снижает вероятность блокировки вашего скрейпера.
  • Простое масштабирование: решения Bright Data разработаны для простого масштабирования, что позволяет вам собирать данные с большого количества веб-страниц одновременно.
  • Перехитрите программное обеспечение для обнаружения ботов: современные веб-сайты используют сложные системы обнаружения ботов. Браузер Bright Data Scraping Browser может успешно имитировать поведение человека, чтобы перехитрить эти алгоритмы обнаружения.

Кроме того, если ручной сбор данных или настройка скриптов кажется слишком трудоемким или сложным, отличным альтернативным решением станут настраиваемые наборы данных Bright Data. Они предлагают набор данных Airbnb, который включает информацию о недвижимости Airbnb, к которой вы можете получить доступ и проанализировать, не занимаясь сбором данных самостоятельно.

Чтобы просмотреть наборы данных, нажмите «Веб-данные» в левом меню навигации, затем выберите «Рынок наборов данных » и найдите Airbnb. Нажмите «Просмотреть набор данных». На этой странице вы можете применить фильтры и приобрести любые данные, которые вам нужны. Вы платите в зависимости от количества записей, которые хотите:

Заключение

В этом уроке вы узнали, как извлекать данные из списков Airbnb с помощью Python, и увидели, как инструменты Bright Data, такие как прокси и Браузер для скрейпинга, могут еще больше упростить эту работу.

Bright Data предлагает набор инструментов, которые помогут вам быстро и легко собирать данные с любого веб-сайта, а не только с Airbnb. Эти инструменты превращают сложные задачи Веб-скрейпинга в простые, экономя ваше время и усилия. Не уверены, какой продукт вам нужен? Поговорите с экспертами Bright Data по веб-данным, чтобы найти правильное решение для ваших потребностей в данных.

Хотите скрапировать другие веб-сайты? Продолжите чтение статей ниже:

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

Вас также может заинтересовать

ChatGPT Atlas Browse × Bright Data MCP
AI

ChatGPT Atlas с веб-сервером MCP от Bright Data

Узнайте, как подключить ChatGPT Atlas к серверу Web MCP от Bright Data, чтобы получить мгновенный доступ к веб-данным в реальном времени и мощные возможности автоматизации — и все это менее чем за 5 минут.
2 мин. чтения
What Is a Scraping Bot
How Tos

Что такое бот для сбора данных и как его создать

Откройте для себя пошаговый процесс создания собственного бота для Веб-скрейпинга! От выбора подходящих инструментов до понимания этики Веб-скрейпинга — это руководство вооружит вас знаниями, необходимыми для создания эффективных и ответственных ботов для ваших проектов.
1 мин. чтения
What Is Company Data blog image
Веб-данные

Объяснение данных о компании: типы и варианты использования

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