scrape hotel listings

Nauka web scrapingu ofert hotelowych to przede wszystkim lekcja radzenia sobie ze skalą i geografią. Internetowe agencje turystyczne (OTA), takie jak Booking oraz serwisy klasy Expedia, pokazują różne stawki zależnie od kraju, waluty, urządzenia i sesji odwiedzającego, dlatego prosty scraper zwraca liczby niespójne lub po prostu błędne.

Ten artykuł omawia praktyczne mechanizmy: które zastosowania uzasadniają ten wysiłek, dlaczego ważne są proxy ukierunkowane geograficznie i sticky session, jak odczytywać endpointy JSON zamiast nietrwałego HTML oraz jak parametry zakresu dat i liczby gości zwiększają liczbę żądań i zużycie pasma. Dwa krótkie przykłady w Pythonie pokazują wzorce żądań i parsowania.

DataImpulse to etyczny dostawca proxy oferujący ponad 90 milionów adresów IP residential, mobile i datacenter w 195 krajach. Stosuje model pay-as-you-go od 1 dolara za GB z ruchem bez terminu ważności i jest używany do web scrapingu, ad verification, monitorowania cen, badań rynku oraz zarządzania wieloma kontami.

Najważniejsze informacje

  • Geolokalizacja ma znaczenie: Ceny i dostępność hoteli zmieniają się zależnie od kraju i waluty, dlatego dokładny web scraping ofert hotelowych wymaga proxy residential ukierunkowanych na dany kraj, które odpowiadają każdemu rynkowi cenowemu.
  • Najlepszy typ proxy: rotacyjne proxy residential korzystające z prawdziwych konsumenckich adresów IP, które omijają wykrywanie.
  • Cena: od 1 dolara za GB, pay-as-you-go, z ruchem bez terminu ważności i bez subskrypcji.
  • Zasięg: ponad 90 mln etycznie pozyskanych adresów IP w 195 krajach.
  • Niezawodność: wskaźnik powodzenia 99,51%, ocena 4,8/5 w G2.
  • Protokoły i kierowanie: HTTP, HTTPS i SOCKS5, z kierowaniem na kraj w cenie.
Śledzenie cen hoteli w OTA

Dlaczego w ogóle wykonywać web scraping ofert hotelowych?

Dane z ofert hotelowych wspierają analizę cen, badania rynku i monitorowanie zgodności stawek w całej branży turystycznej. Zespoły zbierają je, aby odpowiedzieć na pytania, na które statyczne raporty nie dają odpowiedzi.

  • Monitorowanie zgodności stawek: hotele i sieci sprawdzają, czy OTA respektują uzgodnione stawki, czy oferują ceny niższe niż kanał bezpośredniej rezerwacji.
  • Ceny konkurencji: menedżerowie przychodów śledzą, jak pobliskie obiekty wyceniają te same daty i typy pokoi, a następnie dostosowują własne stawki.
  • Badania rynku: analitycy badają sygnały dotyczące obłożenia, sezonowość, trendy w udogodnieniach i nową podaż pojawiającą się w danej lokalizacji.

W każdym przypadku wartość zależy od zbierania cen dokładnie tak, jak widziałby je rzeczywisty podróżny na określonym rynku. W tym momencie zaczyna mieć znaczenie wybór infrastruktury.

Dlaczego kierowanie geograficzne zmienia ceny hoteli?

OTA stosują dynamiczne ceny, więc stawka za ten sam pokój i datę może różnić się zależnie od kraju, waluty, a nawet urządzenia lub sesji odwiedzającego. Żądanie z Niemiec może pokazywać ceny w euro i promocje specyficzne dla regionu, których żądanie ze Stanów Zjednoczonych nigdy nie zobaczy.

Aby pozyskiwać dokładne dane, potrzebujesz adresu IP zlokalizowanego na badanym rynku. Kierowanie na kraj pozwala Ci występować jako lokalny odwiedzający dla każdej waluty i zestawu promocji. Proxy residential są tu zwykłym wyborem, ponieważ ich adresy należą do prawdziwych połączeń konsumenckich, więc OTA traktują je jako zwykłych podróżnych, a nie ruch automatyczny. Proxy datacenter są szybsze i tańsze, ale silne systemy antybotowe łatwiej mogą je oznaczyć, dlatego pasują do celów o niskiej wrażliwości lub pierwszego przebiegu, a nie do chronionych stron OTA.

Jak sticky session pomagają w przepływach wielostronicowych?

Sticky session utrzymują ten sam adres IP dla sekwencji żądań, co jest ważne, ponieważ przepływy w stylu rezerwacji przenoszą stan między stronami. Strona wyników wyszukiwania, strona szczegółów pokoju i etap potwierdzania stawki często współdzielą pliki cookie i tokeny sesji po stronie serwera powiązane z początkowym adresem IP.

Jeśli Twój adres IP zmieni się w trakcie przepływu, witryna może zresetować sesję, pokazać inną walutę lub uruchomić weryfikację. Przypisz jedną sticky session do każdego logicznego wyszukiwania (obiekt plus zakres dat i liczba gości), ukończ potrzebne strony, a następnie ją zwolnij. Używaj sesji rotacyjnych do szerokiego zbierania z pojedynczej strony, na przykład pobierania jednej karty oferty na żądanie, a sticky session zachowaj dla wieloetapowych ścieżek podobnych do finalizacji zakupu. DataImpulse obsługuje zarówno sesje rotacyjne, jak i sticky session w tej samej puli.

Czy wykonywać web scraping HTML czy endpointów JSON?

Gdy są dostępne, wybieraj bazowe endpointy JSON. Większość nowoczesnych OTA ładuje ceny przez działające w tle wywołania XHR lub fetch, które zwracają czysty JSON, podczas gdy widoczny HTML jest renderowany później przez JavaScript i często zmienia układ.

Otwórz narzędzia deweloperskie przeglądarki, obserwuj kartę Network podczas wyszukiwania i szukaj żądań XHR zwracających dane o dostępności i stawkach. Bezpośrednie odtwarzanie tych endpointów jest szybsze, mniej obciąża pasmo i jest znacznie mniej kruche niż parsowanie kart ofert z HTML. Gdy dostępny jest tylko HTML, kieruj się na stabilne atrybuty zamiast kosmetycznych nazw klas. Niezależnie od wybranej drogi nadal obowiązują ogólne techniki obronne z tego przewodnika po web scrapingu bez blokad, a jeśli skupiasz się na jednym OTA, nasz poradnik jak wykonywać web scraping Booking.com omawia szczegółowo jeden serwis.

Jak planować żądania i pasmo?

Oszacuj liczbę żądań przed rozpoczęciem, ponieważ parametry zakresu dat i liczby gości szybko się mnożą. Każdy obiekt, data zameldowania, długość pobytu i konfiguracja gości to osobne zapytanie, więc nawet niewielka siatka wyszukiwania może osiągnąć setki tysięcy żądań.

Na przykład 500 hoteli razy 90 dat zameldowania razy 3 długości pobytu razy 2 opcje liczby gości to 270 000 żądań w jednym przebiegu. Ponieważ plany proxy rozliczają ruch według gigabajtów, ogranicz rozmiar każdej odpowiedzi: korzystaj z endpointów JSON zamiast pełnych stron HTML, żądaj tylko potrzebnych pól i unikaj pobierania obrazów lub kafelków mapy. Poniższy fragment w Pythonie pokazuje, jak budowana jest siatka dat, aby można było określić rozmiar zadania przed jego uruchomieniem.

import requests
from datetime import date, timedelta

proxies = {
    "http": "http://USER:[email protected]:823",
    "https": "http://USER:[email protected]:823",
}

start = date(2026, 8, 1)
dates = [start + timedelta(days=i) for i in range(90)]
stays = [1, 3, 7]

for check_in in dates:
    for nights in stays:
        params = {
            "hotel_id": 123456,
            "checkin": check_in.isoformat(),
            "checkout": (check_in + timedelta(days=nights)).isoformat(),
            "adults": 2,
            "currency": "EUR",
        }
        r = requests.get(
            "https://example-ota.com/api/availability",
            params=params,
            proxies=proxies,
            timeout=20,
        )
        # store r.json() keyed by hotel_id, checkin, nights

Jak parsować karty ofert hotelowych?

Gdy musisz odczytać HTML, parsuj każdą kartę oferty przez zlokalizowanie stabilnego kontenera i wyodrębnienie z niego nazwy, ceny oraz oceny. Przetwarzaj karty pojedynczo, aby zmiana w jednym polu nie przerwała całego przebiegu.

Poniższy przykład używa BeautifulSoup do przejścia przez karty wyników. Dostosuj selektory do celu i zawsze zabezpieczaj się przed brakującymi polami, ponieważ wyprzedane pokoje i układy promocyjne często nie zawierają ceny lub oceny.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
listings = []

for card in soup.select("div[data-testid='property-card']"):
    name = card.select_one("h3")
    price = card.select_one("span[data-testid='price']")
    rating = card.select_one("div[data-testid='rating']")
    listings.append({
        "name": name.get_text(strip=True) if name else None,
        "price": price.get_text(strip=True) if price else None,
        "rating": rating.get_text(strip=True) if rating else None,
    })

print(len(listings), "cards parsed")

Jak radzić sobie z zabezpieczeniami antybotowymi OTA?

Załóż, że ochrona antybotowa w OTA jest silna, i zaprojektuj działanie z jej uwzględnieniem, zamiast walczyć z nią wprost. Duże serwisy turystyczne stosują fingerprinting, ograniczanie liczby żądań, kontrole zachowania oraz ocenę reputacji IP, więc agresywny web scraping z wąskiego zestawu adresów jest szybko wykrywany.

  • Rozłóż żądania na dużą pulę residential, aby żaden pojedynczy IP nie wykazywał nienaturalnego tempa żądań.
  • Ogranicz tempo do poziomu podobnego do ludzkiego i dodaj losowe odstępy między żądaniami zamiast stałego interwału.
  • Dopasuj walutę, język i nagłówki Accept do kraju wyjściowego IP.
  • Rozważ proxy mobile dla najlepiej chronionych stron, ponieważ adresy NAT klasy operatorskiej są współdzielone przez wielu prawdziwych użytkowników i trudniej je całkowicie zablokować.

DataImpulse pozyskuje adresy IP w sposób etyczny od użytkowników, którzy wyrażają zgodę i otrzymują wynagrodzenie, co utrzymuje pulę w zgodzie z oczekiwaniami RODO, zapewniając jednocześnie zasięg geograficzny potrzebny do niezawodnego zbierania danych hotelowych.

Typy proxy dla serwisów turystycznych

Typ proxy Najlepsze zastosowanie Uwaga
Residential rotacyjne Szeroki web scraping cen Nowy IP przy każdym żądaniu
Residential sticky Wieloetapowe przepływy rezerwacji Utrzymuje stabilną sesję
Mobile Serwisy o utrudnionym dostępie Najwyższe zaufanie, wyższa cena
Datacenter Szybkie zapytania masowe Większe prawdopodobieństwo blokady
Które proxy sprawdzają się przy zbieraniu danych hotelowych

Często zadawane pytania

Czy web scraping ofert hotelowych jest legalny?

Web scraping publicznie dostępnych danych ofert jest zasadniczo dopuszczalny w wielu jurysdykcjach, ale nadal obowiązują warunki korzystania z serwisu, lokalne prawo oraz zasady dotyczące danych osobowych lub chronionych prawem autorskim. Przejrzyj warunki wybranego serwisu i skonsultuj się z prawnikiem przed zbieraniem danych na dużą skalę.

Który typ proxy najlepiej sprawdza się w web scrapingu cen hoteli?

Proxy residential ukierunkowane na kraj są zwykłym wyborem, ponieważ ceny OTA różnią się zależnie od rynku, a residential IP prezentują się jako prawdziwi lokalni podróżni. Proxy mobile pomagają na najlepiej chronionych stronach, a proxy datacenter pasują do zbierania danych o niskiej wrażliwości lub do pierwszego przebiegu.

Dlaczego otrzymuję inne ceny niż pokazuje witryna?

Ceny hoteli zależą od kraju, waluty, sesji, a czasem urządzenia odwiedzającego, dlatego IP lub waluta niedopasowane do badanego rynku zwracają inne liczby. Dopasuj kraj wyjściowego IP i walutę do rynku docelowego.

Ile pasma zużywa web scraping hoteli?

Zależy to od liczby żądań, która szybko rośnie wraz z siatkami dat i liczby gości. Korzystanie z endpointów JSON i żądanie wyłącznie potrzebnych pól utrzymuje niewielki rozmiar każdej odpowiedzi, dlatego przed rozpoczęciem dużego przebiegu oszacuj rozmiar siatki i wagę pojedynczej odpowiedzi.

Czy wykonywać web scraping strony HTML czy endpointu API?

Wybieraj endpointy JSON wywoływane w tle przez OTA, ponieważ są lżejsze, szybsze i stabilniejsze od HTML renderowanego przez JavaScript. Parsowanie kart ofert traktuj jako rozwiązanie rezerwowe tylko wtedy, gdy nie udostępniono odpowiedniego endpointu.

Kiedy DataImpulse nie jest właściwym rozwiązaniem?

Jeśli potrzebujesz statycznych proxy ISP, w pełni zarządzanego API do web scrapingu lub dostępu do serwisów bankowych i rządowych, DataImpulse nie jest właściwym narzędziem. Koncentruje się na rotacyjnych proxy residential, mobile i datacenter do zbierania danych publicznych oraz dostępu do treści.

Zacznij zbierać dokładne dane hotelowe

Jeśli potrzebujesz dokładnych dla danego kraju stawek z OTA i stron hoteli, DataImpulse oferuje etycznie pozyskane adresy IP residential, mobile i datacenter w 195 krajach, z sesjami rotacyjnymi i sticky session od 1 dolara za GB. Utwórz konto i uruchom dziś swoje pierwsze zadanie zbierania ofert hotelowych.


Share article: