Automatiza la extracción de listados de bienes raíces con Scrapeless y flujos de trabajo de n8n.
Advanced Data Extraction Specialist
En la industria inmobiliaria, automatizar el proceso de recopilar las últimas listas de propiedades y almacenarlas en un formato estructurado para análisis es clave para mejorar la eficiencia. Este artículo proporcionará una guía paso a paso sobre cómo utilizar la plataforma de automatización de bajo código n8n, junto con el servicio de raspado web Scrapeless, para recopilar regularmente listas de alquiler de la página web de bienes raíces LoopNet y escribir automáticamente los datos estructurados de las propiedades en Google Sheets para un análisis y compartición fáciles.
1. Objetivo y Arquitectura del Flujo de Trabajo
Objetivo: Obtener automáticamente las últimas listas en venta/en alquiler de una plataforma de bienes raíces comerciales (p. ej., Crexi / LoopNet) en un horario semanal.
Eludir los mecanismos de anti-raspado y almacenar los datos en un formato estructurado en Google Sheets, facilitando así los informes y la visualización BI.
Arquitectura Final del Flujo de Trabajo:

2. Preparación
- Regístrate para obtener una cuenta en el sitio web oficial de Scrapeless y obtén tu API Key (2,000 solicitudes gratuitas por mes).
- Inicia sesión en el Panel de Scrapeless
- Luego haz clic en "Configuración" a la izquierda -> selecciona "Gestión de API Key" -> haz clic en "Crear API Key". Finalmente, haz clic en la API Key que creaste para copiarla.

- Asegúrate de haber instalado la versión comunitaria del nodo Scrapeless en n8n

- Un documento de Google Sheets con permisos de escritura y las credenciales de API correspondientes.
3. Resumen de Pasos del Flujo de Trabajo
| Paso | Tipo de Nodo | Propósito |
|---|---|---|
| 1 | Disparador de Programación | Activar automáticamente el flujo de trabajo cada 6 horas. |
| 2 | Raspador de Scrapeless | Raspando las páginas de LoopNet y devolviendo el contenido raspado en formato markdown. |
| 4 | Nodo de Código (Parsear Listados) | Extraer el campo markdown de la salida de Scrapeless; usar regex para analizar el markdown y extraer datos de listado de propiedades estructurados. |
| 6 | Adjuntar a Google Sheets | Escribir los datos estructurados de la propiedad en un documento de Google Sheets. |
4. Configuración Detallada y Explicación del Código
1. Disparador de Programación
- Tipo de Nodo: Disparador de Programación
- Configuración: Establecer el intervalo en semanal (o ajustarlo según sea necesario).
- Propósito: Activar automáticamente el flujo de raspado según la programación, sin necesidad de acción manual.
2. Nodo Raspador de Scrapeless
- Tipo de Nodo: Nodo API de Scrapeless (
crawler - crawl) - Configuración:
- URL: Página LoopNet objetivo, p. ej.
https://www.loopnet.com/search/commercial-real-estate/los-angeles-ca/for-lease/ - API Key: Ingresa tu API Key de Scrapeless.
- Limitar Páginas: 2 (ajustar según sea necesario).
- URL: Página LoopNet objetivo, p. ej.
- Propósito: Raspar automáticamente el contenido de la página y devolver la página web en formato markdown.
3. Parsear Listados
- Propósito: Extraer datos clave de bienes raíces comerciales del contenido de la página web en formato markdown raspado por Scrapeless y generar una lista de datos estructurados.
- Código:
const markdownData = [];
$input.all().forEach((item) => {
item.json.forEach((c) => {
markdownData.push(c.markdown);
});
});
const results = [];
function dataExtact(md) {
const re = /\[Más detalles para ([^\]]+)\]\((https:\/\/www\.loopnet\.com\/Listing\/[^\)]+)\)/g;
let match;
while ((match = re.exec(md))) {
const title = match[1].trim();
const link = match[2].trim()?.split(' ')[0];
// Extraer un fragmento de contexto alrededor de la coincidencia
const context = md.slice(match.index, match.index + 500);
// Extraer rango de tamaño, p. ej. "10,000 - 20,000 SF"
const sizeMatch = context.match(/([\d,]+)\s*-\s*([\d,]+)\s*SF/);
const sizeRange = sizeMatch ? `${sizeMatch[1]} - ${sizeMatch[2]} SF` : null;
// Extraer año de construcción, p. ej. "Construido en 1988"
const yearMatch = context.match(/Construido en\s*(\d{4})/i);
const yearBuilt = yearMatch ? yearMatch[1] : null;
// Extraer URL de imagen
javascript
const imageMatch = context.match(/!\[[^\]]*\]\((https:\/\/images1\.loopnet\.com[^\)]+)\)/);
const image = imageMatch ? imageMatch[1] : null;
results.push({
json: {
title,
link,
size: sizeRange,
yearBuilt,
image,
},
});
// Retornar el markdown original si no se encontraron coincidencias (para depuración)
if (results.length === 0) {
return [
{
json: {
error: 'No se encontraron listados coincidentes',
raw: md,
},
},
];
}
}
markdownData.forEach((item) => {
dataExtact(item);
});
return results;

4. Agregar a Google Sheets (Nodo de Google Sheets)
- Operación: Agregar
- Configuración:
- Selecciona el archivo de Google Sheets de destino.
- Nombre de la hoja: Por ejemplo,
Informe del Mercado Inmobiliario. - Configuración de Mapeo de Columnas: Mapea los campos de datos estructurados de la propiedad a las columnas correspondientes en la hoja.
| Columna de Google Sheets | Campo JSON Mapeado |
|---|---|
| Título | {{ $json.title }} |
| Enlace | {{ $json.link }} |
| Tamaño | {{ $json.size }} |
| AñoConstruido | {{ $json.yearBuilt }} |
| Imagen | {{ $json.image }} |


Nota:
Se recomienda que el nombre de su hoja de trabajo sea consistente con el nuestro. Si necesita modificar un nombre específico, debe prestar atención a la relación de mapeo.
5. Salida de Resultados

5. Diagrama de Flujo del Workflow

6. Consejos de Depuración
- Al ejecutar cada nodo de Código, abre la salida del nodo para verificar el formato de datos extraídos.
- Si el nodo de Parse Listings no devuelve datos, verifica si la salida de Scrapeless contiene contenido markdown válido.
- El nodo de Formato de Salida se utiliza principalmente para limpiar y normalizar la salida para asegurar un mapeo de campo correcto.
- Al conectar el nodo de Agregar a Google Sheets, asegúrate de que tu autorización OAuth esté configurada correctamente.
7. Optimización Futura
- Desduplicación: Evitar escribir listados de propiedades duplicados.
- Filtrado por Precio o Tamaño: Agregar filtros para dirigirse a listados específicos.
- Notificaciones de Nuevos Listados: Enviar alertas por correo electrónico, Slack, etc.
- Automatización Multi-Ciudad y Multi-Página: Automatizar el scraping en diferentes ciudades y páginas.
- Visualización de Datos e Informes: Crear paneles y generar informes a partir de los datos estructurados.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



