Tony Wang5 min de lecturaCómo hacer scraping de Booking.com en 2026 (API y Python)
Scraping de Booking.com en 2026 — hoteles, reseñas, vuelos y atracciones — DIY, no-code o API estructurada, con las bases legales.
La forma más rápida de hacer scraping de Booking.com en 2026 es llamar a una API estructurada que devuelve JSON normalizado — búsqueda de hoteles, detalle, reseñas de huéspedes, ofertas de vuelos y atracciones — en lugar de replicar tú mismo el GraphQL de persisted-query y los endpoints REST internos propios de Booking.com. Booking.com es la OTA más grande por tráfico, pero su API oficial está limitada a partners y sus páginas corren detrás de defensas anti-bot reales. Esta guía cubre las tres opciones en las tres superficies (hoteles, vuelos, atracciones), dónde falla el DIY, y las bases legales.
¿Por qué hacer scraping de Booking.com?
Los datos de hoteles, vuelos y atracciones de Booking.com impulsan:
- Monitoreo de precios y disponibilidad de hoteles — rastrea cómo se mueve la tarifa de una propiedad según fecha, tipo de habitación y temporada.
- Investigación de tarifas competitivas — compara el precio de un hotel en Booking.com contra otros canales.
- Análisis de reseñas y reputación — agrega puntuaciones y textos de reseñas de huéspedes por hotel, fecha o tipo de viajero.
- Investigación de tarifas de vuelos — rastrea el movimiento de tarifas por ruta/fecha junto con el precio de hoteles para un destino.
- Descubrimiento de destinos y actividades — muestra atracciones y actividades para un producto de planificación de viajes o itinerarios.
¿Es legal hacer scraping de Booking.com?
Opción 1: DIY en Python (y por qué falla)
Las páginas de hoteles de Booking.com se renderizan a partir de llamadas GraphQL de persisted-query en lugar de HTML plano, así que un scraper DIY replica esas queries:
import requests
# Booking.com's search UI calls a persisted-query GraphQL endpoint
resp = requests.post(
"https://www.booking.com/dml/graphql",
json={"operationName": "SearchResults", "variables": {"destination": "Tokyo"}, "extensions": {"persistedQuery": {"sha256Hash": "..."}}},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
Funciona en la demo y luego se rompe:
- Anti-bot real, no un bloqueo suave. Booking.com pone una capa de JavaScript-challenge frente a sus páginas de búsqueda y detalle de hotel — un cliente HTTP simple recibe una página de challenge en lugar de contenido, así que necesitas un navegador real (o un transporte con forma de navegador), no solo headers realistas.
- No hay API oficial self-serve. El acceso a la Demand API real requiere convertirte en un Affiliate Partner aprobado — una solicitud, un proceso de aprobación y una relación comercial con comisión por reserva — no un formulario de registro para un caso de uso de investigación o monitoreo.
- Deriva de las persisted-query. Igual que con JustWatch, las queries de GraphQL están hasheadas y versionadas; las queries replicadas se rompen cuando Booking.com publica un nuevo hash.
- Tres superficies distintas, tres formas distintas. Hoteles, vuelos y atracciones son productos separados con endpoints y formas de respuesta separadas — cubrir las tres significa tres integraciones, no una.
Opción 2: Herramientas no-code
Existen actores de scraping de marketplace específicamente para la búsqueda de hoteles de Booking.com y sirven para extracciones puntuales, pero heredan la misma fragilidad de anti-bot y persisted-query que el DIY, y no cubren vuelos ni atracciones en la misma herramienta.
Opción 3: Una API estructurada de Booking.com
Para un flujo de trabajo repetible en las tres superficies, una API de scraping de Booking.com devuelve JSON normalizado sin necesidad de una flota de navegadores ni mantenimiento de persisted-query. Busca hoteles por destino y fechas:
curl "https://api.crawlora.net/api/v1/booking/search?query=Tokyo&checkin=2026-09-10&checkout=2026-09-14&adults=2" \
-H "x-api-key: $CRAWLORA_API_KEY"
Trae el detalle y las reseñas de un hotel, más una búsqueda de vuelo y atracción, en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1"
hotels = requests.get(f"{base}/booking/search", headers=h, params={
"query": "Tokyo", "checkin": "2026-09-10", "checkout": "2026-09-14", "adults": 2,
}).json()["data"]["properties"]
hotel_id = hotels[0]["id"]
detail = requests.get(f"{base}/booking/hotel-detail", headers=h, params={"hotel_id": hotel_id}).json()["data"]
reviews = requests.get(f"{base}/booking/reviews", headers=h, params={"hotel_id": hotel_id, "hotel_country_code": "jp", "limit": 20}).json()["data"]
flights = requests.get(f"{base}/booking-flights/search", headers=h, params={
"from": "NRT", "to": "LAX", "depart": "2026-09-10",
}).json()["data"]
attractions = requests.get(f"{base}/booking-attractions/search", headers=h, params={
"query": "Tokyo", "start_date": "2026-09-10",
}).json()["data"]
Un resultado de búsqueda de hotel es JSON normalizado (campos reales — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"destination": "Tokyo",
"results_count": 1842,
"properties": [
{
"id": 201234,
"slug": "example-hotel-tokyo",
"name": "Example Hotel Tokyo",
"location": "Shinjuku, Tokyo",
"star_rating": 4,
"review_score": 8.6,
"review_count": 3120,
"price": 148,
"currency": "USD",
"url": "https://www.booking.com/hotel/jp/example-hotel-tokyo.html"
}
]
}
}
El detalle del hotel añade rooms, facilities, highlights, house_rules y rating_scores (un desglose por categoría — limpieza, ubicación, relación calidad-precio); las reseñas devuelven por cada una positive_text/negative_text, score, stay_status, room_type y reviewer_country. Guarda una fila por hotel y por fecha consultada, y vuelve a ejecutarlo con una programación para rastrear precio y disponibilidad.
Qué puedes recolectar
Datos públicos de hoteles: resultados de búsqueda (id, nombre, ubicación, calificación en estrellas, puntuación de reseñas, precio); detalle de hotel (habitaciones, instalaciones, highlights, reglas de la casa, desglose de calificación, fotos); reseñas de huéspedes (puntuación, texto positivo/negativo, fechas de estadía, tipo de viajero, país). Datos de vuelos: ofertas de tarifas por ruta y fecha, autocompletado para orígenes/destinos. Datos de atracciones: búsqueda de cosas que hacer por destino y fechas, detalle de producto y reseñas. Solo datos públicos de listados y reseñas.
Limitaciones y desafíos comunes
- Requiere manejo real de anti-bot. La capa de JS-challenge de Booking.com implica que un cliente HTTP ingenuo no llega al contenido — presupuesta un transporte con forma de navegador, no solo headers.
- No hay API oficial self-serve. La Demand API es solo para Affiliate Partners con una relación de comisión — no encaja con un producto de investigación o monitoreo.
- Las tarifas cambian según fecha, tipo de habitación y ocupación. Una sola captura solo cubre las fechas y el tamaño de grupo que buscaste — vuelve a extraer por cada rango de fechas que te interese.
- Tres superficies separadas. Hoteles, vuelos y atracciones no comparten ids ni un esquema — trátalos como tres integraciones incluso dentro de una misma plataforma.
- Solo datos públicos. Esto recolecta lo que está listado públicamente — nunca una forma de completar o manipular una reserva real.
Dónde se usa esto
- Monitoreo de precios y disponibilidad de hoteles — rastrea la tarifa y ocupación de una propiedad a lo largo del tiempo.
- Análisis de reseñas y reputación — agrega el sentimiento de los huéspedes por hotel o destino.
- Herramientas de planificación de viajes e itinerarios — combina datos de hoteles, vuelos y atracciones para un destino.
Sources
Empieza a recolectar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de search y hotel-detail en el Playground, revisa el esquema en los API docs, y consulta los pricing. Booking.com cubre dónde alojarte; how to scrape Airbnb cubre el lado de alquileres de corto plazo del mismo viaje, y how to scrape TripAdvisor cubre hoteles, atracciones y reseñas de viajeros desde un ángulo centrado en reseñas. Consulta también how to choose a web scraping API y is web scraping legal.
Preguntas frecuentes
¿Booking.com tiene una API oficial?
Sí, la Demand API — pero está limitada a Affiliate Partners aprobados bajo una relación comercial con comisión por reserva, no es un registro self-serve para casos de uso de investigación o monitoreo de precios. Una API de scraping estructurada es la vía práctica para eso.
¿Es legal hacer scraping de Booking.com?
Los hechos públicos de un listado (nombre del hotel, precio, calificación en estrellas, puntuación de reseñas) no tienen derechos de autor, pero los términos de Booking.com prohíben la extracción automatizada de datos. Limítate a los hechos públicos de listados y reseñas, respeta los límites de tasa, nunca saltes un login, y no intentes hacer o manipular una reserva a partir de datos scrapeados. No es asesoría legal.
¿Puedo hacer scraping de Booking.com sin que me bloqueen?
Booking.com pone una capa de JavaScript-challenge frente a sus páginas, así que un cliente HTTP simple no llega al contenido — necesitas un transporte con forma de navegador, no solo headers realistas. Una API estructurada se encarga de esto detrás de una sola API key.
¿Cómo obtengo las habitaciones y reseñas de un hotel?
Busca para obtener un id de hotel, y luego llama a /booking/hotel-detail para habitaciones, instalaciones y un desglose de calificación, y a /booking/reviews para reseñas individuales de huéspedes (puntuación, texto positivo/negativo, fechas de estadía, tipo de viajero, país).
¿Puedo buscar también vuelos y atracciones, no solo hoteles?
Sí. /booking-flights/search devuelve ofertas de tarifas por ruta y fecha (con /booking-flights/autocomplete para resolver aeropuertos), y /booking-attractions/search devuelve cosas que hacer por destino y rango de fechas, con /booking-attractions/detail y /booking-attractions/reviews para productos individuales.
¿Con qué frecuencia cambian los precios de los hoteles?
Las tarifas varían según fecha, tipo de habitación y ocupación, así que una sola búsqueda solo refleja el tamaño de grupo y las fechas que consultaste. Vuelve a extraer por cada rango de fechas que te interese y ejecútalo con una programación para rastrear disponibilidad y movimiento de precio.
¿Qué datos de Booking.com puedo recolectar?
Datos públicos de hoteles (búsqueda, detalle, habitaciones, instalaciones, desglose de calificación), reseñas de huéspedes, ofertas de tarifas de vuelos y listados de atracciones con reseñas — solo datos públicos, nunca una reserva completada o manipulada.