Este tutorial le guía a través del proceso de recopilación manual de datos públicos de Airbnb utilizando Python. Los datos recopilados pueden ayudar a analizar las tendencias del mercado, desarrollar estrategias de precios competitivas, realizar análisis de opiniones a partir de las reseñas de los huéspedes o crear sistemas de recomendación.
Además, explore las soluciones avanzadas de Bright Data. Sus Proxy especializados y navegadores de scraping aptos simplifican y mejoran el proceso de extracción de datos.
Cómo extraer datos de Airbnb
Antes de empezar, se recomienda tener algunos conocimientos básicos sobre Scraping web y HTML. Además, asegúrate de instalar Python en tu ordenador si aún no lo tienes. Laguía oficial de Pythonproporciona instrucciones detalladas sobre cómo hacerlo. Si ya tienes Python instalado, asegúrate de que está actualizado a la versión 3.7.9 o posterior. También recomendamos leer el tutorial completo sobre Scraping web con Python antes de empezar.
Una vez instalado Python, inicia tu terminal o interfaz de línea de comandos y crea un nuevo directorio de proyecto con los siguientes comandos:
mkdir airbnb-scraper && cd airbnb-scraper
Después de crear un nuevo directorio de proyecto, debes configurar algunas bibliotecas adicionales que utilizarás para el Scraping web. En concreto, utilizarás Requests, una biblioteca que permite realizar solicitudes HTTP en Python; pandas, una sólida biblioteca dedicada a la manipulación y el análisis de datos; Beautiful Soup (BS4) para realizar parseo de contenido HTML; y Playwright para automatizar tareas basadas en el navegador.
Para instalar estas bibliotecas, abre tu terminal o shell y ejecuta los siguientes comandos:
pip3 install beautifulsoup4
pip3 install requests
pip3 install pandas
pip3 install playwright
playwright install
Asegúrate de que el proceso de instalación se complete sin errores antes de pasar al siguiente paso de este tutorial.
Nota: El último comando (es decir,
playwright install) es necesario para instalar los binarios del navegador.
Estructura y objetos de datos de Airbnb
Antes de empezar a extraer datos de Airbnb, es fundamental que te familiarices con su estructura. La página principal de Airbnb cuenta con una barra de búsqueda fácil de usar, que te permite buscar opciones de alojamiento, experiencias e incluso aventuras.
Al introducir los criterios de búsqueda, los resultados se presentan en formato de lista, mostrando las propiedades con sus nombres, precios, ubicaciones, valoraciones y otros detalles pertinentes. Cabe destacar que estos resultados de búsqueda se pueden filtrar en función de diversos parámetros, como el rango de precios, el tipo de propiedad y las fechas de disponibilidad.
Si quieres ver más resultados de búsqueda que los que se muestran inicialmente, puedes utilizar los botones de paginación situados en la parte inferior de la página. Cada página suele contener numerosos anuncios, lo que te permite explorar propiedades adicionales. Los filtros que se encuentran en la parte superior de la página te permiten refinar tu búsqueda según tus necesidades y preferencias.
Para ayudarle a comprender la estructura HTML del sitio web de Airbnb, siga estos pasos:
- Acceda al sitio web de Airbnb.
- Introduce la ubicación deseada, el intervalo de fechas y el número de huéspedes en la barra de búsqueda y pulsa Intro.
- Inicie las herramientas de desarrollo del navegador haciendo clic con el botón derecho del ratón en una ficha de propiedad y seleccionando «Inspeccionar».
- Explora el diseño HTML para localizar las etiquetas y los atributos que contienen los datos que te interesan.
Extraiga un anuncio de Airbnb
Ahora que ya conoce mejor la estructura de Airbnb, configure Playwright para navegar hasta un anuncio de Airbnb y extraer datos. En este ejemplo, recopilará el nombre del anuncio, la ubicación, los detalles de precios, los datos del propietario y las reseñas.
Crea un nuevo script de Python, airbnb_scraper.py, y añade el siguiente código:
import asyncio
from playwright.async_api import async_playwright
import pandas as pd
async def scrape_airbnb():
async with async_playwright() as pw:
# Iniciar un nuevo navegador
browser = await pw.chromium.launch(headless=False)
page = await browser.new_page()
# Ir a la URL de Airbnb
await page.goto('https://www.airbnb.com/s/homes', timeout=600000)
# Esperar a que se carguen los anuncios
await page.wait_for_selector('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
# Extraer información
results = []
listings = await page.query_selector_all('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
for listing in listings:
result = {}
# Nombre de la propiedad
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'
# Ubicación
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'
# Precio
price_element = await listing.query_selector('div._1jo4hgw')
result['price'] = await price_element.inner_text() if price_element else 'N/A'
results.append(result)
# Cerrar navegador
await browser.close()
return results
# Ejecutar el rastreador y guardar los resultados en un archivo CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings.csv', index=False)
La función scrape_airbnb() abre un navegador de forma asíncrona, visita la página de anuncios de Airbnb y recopila detalles como el nombre de la propiedad, la ubicación y el precio de cada anuncio. Si no se encuentra un elemento, se marca como N/A. Después del procesamiento, los datos adquiridos se almacenan en un DataFrame de pandas y se guardan como un archivo CSV llamado airbnb_listings.csv.
Para ejecutar el script, ejecute python3 airbnb_scraper.py en su terminal o shell. Su archivo CSV debería tener este aspecto:
property_name,location,price
«Brand bei Bludenz, Austria», a 343 kilómetros de distancia, «2047 €
por noche»
«Saint-Nabord, Francia», a 281 kilómetros de distancia, «315 €
por noche»
«Kappl, Austria», a 362 kilómetros de distancia, «1090 €
por noche»
«Fraisans, Francia», a 394 kilómetros, «181 €
por noche»
«Lanitz-Hassel-Tal, Alemania», a 239 kilómetros, «185 €
por noche»
«Hohentannen, Suiza», a 291 kilómetros, «189 €
por noche»
...salida omitida...
Mejora el Scraping web con los proxies de Bright Data
El rastreo de sitios web a veces puede plantear retos, como bloqueos de IP y bloqueos geográficos. Aquí es donde los Proxyde Bright Data resultan útiles, ya que le permiten sortear estos obstáculos y mejorar sus esfuerzos de rastreo de datos.
Después de ejecutar el script anterior varias veces, es posible que deje de recibir datos. Esto puede suceder si Airbnb detecta su IP y le bloquea el rastreo de su sitio web.
Para mitigar los retos asociados, una solución práctica es implementar proxies para el scraping. Estas son algunas de las ventajas de utilizar proxies para el scraping web:
- evitar las restricciones de IP
- rotar direcciones IP
- El equilibrio de carga garantiza la distribución del tráfico de la red o de la aplicación entre muchos recursos, lo que evita que un solo componente se convierta en un cuello de botella y proporciona redundancia en caso de fallo.
Cómo integrar los Proxy de Bright Data en tu script de Python
Con las ventajas mencionadas anteriormente, es fácil entender por qué alguien querría incorporar los proxies de Bright Data en un script de Python. La buena noticia es que es muy fácil de hacer. Solo hay que crear una cuenta de Bright Data, configurar los ajustes del proxy e implementarlos en el código Python.
Para empezar, debe crear una cuenta de Bright Data. Para ello, vaya al sitio web de Bright Data y seleccione «Prueba gratuita»; a continuación, siga las instrucciones.
Inicie sesión en su cuenta de Bright Data y haga clic en la tarjeta de crédito de la barra de navegación izquierda para acceder a Facturación. Aquí, debe introducir su método de pago preferido para activar su cuenta:

A continuación, haz clic en el icono del pin de la barra de navegación izquierda para acceder a la página Proxies e infraestructura de scraping; luego haz clic en Añadir > Proxies residenciales:

Asigne un nombre a su Proxy (por ejemplo, proxy_residencial1) y utilice la opción «Compartido» en «Tipo de IP». A continuación, haga clic en «Añadir»:

Una vez que haya creado su Proxy residencial, tome nota de los parámetros de acceso, ya que necesitará utilizar estos datos en su código:

Para poder utilizar el Proxy residencial de Bright Data, debe configurar un certificado para su navegador. Encontrará instrucciones sobre cómo instalar el certificado en este tutorial de Bright Data.
Crea un nuevo script Python airbnb_scraping_proxy.py y añade el siguiente código:
from playwright.sync_api import sync_playwright
import pandas as pd
def run(playwright):
browser = playwright.chromium.launch()
context = browser.new_context()
# Configurar el proxy
proxy_username='TU_NOMBRE_DE_USUARIO_DE_BRIGHTDATA_PROXY'
proxy_password='TU_CONTRASEÑA_DE_PROXY_DE_BRIGHTDATA'
proxy_host = 'TU_HOST_DE_PROXY_DE_BRIGHTDATA'
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')
# Esperar a que se cargue la página
página.wait_for_load_state("networkidle")
# Extraer los datos
resultados = página.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)
# Cerrar el navegador
browser.close()
with sync_playwright() as playwright:
run(playwright)
Este código utiliza la biblioteca Playwright para iniciar un navegador Chromium con un servidor Proxy específico. Navega a la página de inicio de Airbnb, extrae detalles como los nombres de las propiedades, las ubicaciones y los precios de los anuncios, y guarda los datos en un archivo CSV utilizando pandas. Después de la extracción de datos, se cierra el navegador.
Nota: Reemplaza
proxy_username,proxy_passwordyproxy_hostcon tus parámetros de acceso a Bright Data.
Para ejecutar el script, ejecute python3 airbnb_scraping_proxy.py en su terminal o shell. Los datos extraídos se guardan en un archivo CSV llamado airbnb_listings_scraping_proxy.csv. Su archivo CSV debería tener este aspecto:
property_name,location,price
«Sithonia, Grecia», Lagomandra, «3305 $
por noche»
«Apraos, Grecia», «a 1080 kilómetros», «237 $
por noche»
«Magnisia, Grecia», Milopotamos Paralympic, «200 $
por noche»
«Vourvourou, Grecia», a 861 kilómetros, «357 $
por noche»
«Rovies, Grecia», a 1019 kilómetros, «1077 $
por noche»
...salida omitida...
Rastreando Airbnb con el navegador de scraping de Bright Data
El proceso de scraping puede ser aún más eficiente con el navegador de scraping de Bright Data. Esta herramienta está diseñada específicamente para el scraping web y ofrece una serie de ventajas, como el desbloqueo automático, la fácil escalabilidad y la capacidad de burlar el software de detección de bots.
Vaya a su panel de control de Bright Data y haga clic en el icono del pin para acceder a la página Proxies e infraestructura de scraping; a continuación, haga clic en Añadir > Navegador de scraping:

Asigna un nombre (por ejemplo, scraping_browser) y haz clic en Añadir:

A continuación, seleccione Parámetros de acceso y registre su nombre de usuario, host y contraseña; estos datos serán necesarios más adelante en esta guía:

Una vez completados estos pasos, cree un nuevo script de Python llamado airbnb_scraping_brower.py y añada el siguiente código:
import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd
username='TU_NOMBRE_DE_USUARIO_DE_BRIGHTDATA'
password='TU_CONTRASEÑA_DE_BRIGHTDATA'
auth=f'{username}:{password}'
host = 'TU_HOST_DE_BRIGHTDATA'
browser_url = f'wss://{auth}@{host}'
async def scrape_airbnb():
async with async_playwright() as pw:
# Iniciar nuevo navegador
print('conectando')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
# Ir a la URL de Airbnb
await page.goto('https://www.airbnb.com/s/homes', timeout=120000)
print('done, evaluating')
# Obtener todo el contenido HTML
html_content = await page.evaluate('()=>document.documentElement.outerHTML')
# Parseo el HTML con Beautiful Soup
soup = BeautifulSoup(html_content, 'html.parser')
# Extraer información
results = []
listings = soup.select('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
for listing in listings:
result = {}
# Nombre de la propiedad
name_element = listing.select_one('div[data-testid="listing-card-title"]')
result['property_name'] = name_element.text if name_element else 'N/A'
# Ubicación
location_element = listing.select_one('div[data-testid="listing-card-subtitle"]')
result['location'] = location_element.text if location_element else 'N/A'
# Precio
price_element = listing.select_one('div._1jo4hgw')
result['price'] = price_element.text if price_element else 'N/A'
results.append(result)
# Cerrar navegador
await browser.close()
return results
# Ejecutar el rastreador y guardar los resultados en un archivo CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings_scraping_browser.csv', index=False)
Este código utiliza el Proxy de Bright Data para conectarse a un navegador Chromium y extraer los detalles de las propiedades (es decir, el nombre, la ubicación y el precio) del sitio web de Airbnb. Los datos obtenidos se almacenan en una lista, luego se guardan en un DataFrame y se exportan a un archivo CSV llamado airbnb_listings_scraping_browser.csv.
Nota: Recuerda sustituir el
nombre de usuario,la contraseñayel hostpor tus parámetros de acceso a Bright Data.
Ejecute el código desde su terminal o shell:
python3 airbnb_scraping_browser.py
Deberías ver un nuevo archivo CSV llamado airbnb_listings_scraping_browser.csv creado en tu proyecto. El archivo debería tener este aspecto:
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"
«Fox Lake, Illinois», lago Nippersink, «199 $
por noche»
«Salem, Wisconsin», lago Hooker, «880 $
por noche»
...salida omitida...
Ahora, extraiga algunos datos relacionados con un único anuncio. Cree un nuevo script de Python, airbnb_scraping_single_listing.py, y añada el siguiente código:
import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd
username='TU_NOMBRE_DE_USUARIO_DE_BRIGHTDATA'
password='TU_CONTRASEÑA_DE_BRIGHTDATA'
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:
# Iniciar un nuevo navegador
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
# Ir a la URL de Airbnb
await page.goto('https://www.airbnb.com/rooms/26300485', timeout=120000)
print('hecho, evaluando')
# Esperar a que se cargue el contenido
await page.wait_for_selector('div.tq51prx.dir.dir-ltr h2')
# Obtener todo el contenido HTML
html_content = await page.evaluate('()=>document.documentElement.outerHTML')
# Analizar el HTML con Beautiful Soup
soup = BeautifulSoup(html_content, 'html.parser')
# Extraer el nombre del host
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: {host_name}')
# Extraer reseñas
reviews_span = soup.select_one('span._s65ijh7 button')
reviews = reviews_span.text.split(" ")[0] if reviews_span else 'N/A'
print(f'Reviews: {reviews}')
# Close browser
await browser.close()
return {
'host_name': host_name,
'reviews': reviews,
}
# Ejecutar el rastreador y guardar los resultados en un archivo CSV
results = asyncio.run(scrape_airbnb_listing())
df = pd.DataFrame([results]) # results es ahora un diccionario
df.to_csv('scrape_airbnb_listing.csv', index=False)
En este código, navegas a la URL del anuncio deseado, extraes el contenido HTML, lo sometes a Parseo con Beautiful Soup para recuperar el nombre del anfitrión y el número de reseñas, y, por último, guardas los detalles extraídos en un archivo CSV utilizando pandas.
Ejecuta el código desde tu terminal o shell:
python3 airbnb_scraping_single_listing.py
Deberías ver un nuevo archivo CSV llamado scrape_airbnb_listing.csv en tu proyecto. El contenido de este archivo debería ser similar al siguiente:
host_name,reviews
Amelia,88
Todo el código de este tutorial está disponible en este repositorio de GitHub.
Ventajas de utilizar el navegador de scraping de Bright Data
Hay varias razones por las que deberías considerar elegir el navegador de scraping de Bright Data en lugar de una instancia local de Chromium. Echa un vistazo a algunas de estas razones:
- Desbloqueo automático: el navegador de scraping de Bright Data gestiona automáticamente los CAPTCHA, las páginas bloqueadas y otros retos que utilizan los sitios web para disuadir a los scrapers. Esto reduce drásticamente las posibilidades de que tu scraper sea bloqueado.
- Fácil escalabilidad: las soluciones de Bright Data están diseñadas para escalarse fácilmente, lo que le permite recopilar datos de un gran número de páginas web simultáneamente.
- Superar al software de detección de bots: los sitios web modernos utilizan sofisticados sistemas de detección de bots. El navegador de scraping de Bright Data puede imitar con éxito el comportamiento humano para burlar estos algoritmos de detección.
Además, si el scraping manual de datos o la configuración de scripts le parece demasiado laborioso o complejo, los conjuntos de datos personalizados de Bright Data son una excelente alternativa. Ofrecen un conjunto de datos de Airbnb que incluye información sobre las propiedades de Airbnb a la que puede acceder y analizar sin tener que realizar ningún scraping por su cuenta.
Para ver los conjuntos de datos, haz clic en «Datos web» en el menú de navegación de la izquierda, selecciona «Mercado de conjuntos de datos » y busca «Airbnb». Haz clic en «Ver conjunto de datos». Desde esta página, puedes aplicar filtros y comprar los datos que desees. El pago se basa en el número de registros que desees:

Conclusión
En este tutorial, ha aprendido a extraer datos de los anuncios de Airbnb utilizando Python y ha visto cómo las herramientas de Bright Data, como los Proxy y el Navegador de scraping, pueden facilitar aún más esta tarea.
Bright Data ofrece un conjunto de herramientas que pueden ayudarle a recopilar datos de cualquier sitio web, no solo de Airbnb, de forma rápida y sencilla. Estas herramientas convierten las difíciles tareas de Scraping web en tareas sencillas, lo que le ahorra tiempo y esfuerzo. ¿No está seguro de qué producto necesita? Hable con los expertos en datos web de Bright Data para encontrar la solución adecuada a sus necesidades de datos.
¿Te interesa extraer datos de otros sitios web? Continúa con los siguientes artículos:
Nota: esta guía ha sido probada exhaustivamente por nuestro equipo en el momento de su redacción, pero dado que los sitios web actualizan con frecuencia su código y estructura, es posible que algunos pasos ya no funcionen como se esperaba.