Este script es un scraper desarrollado en Node.js que extrae información de propiedades del sitio web FincaRaíz, un popular portal en Colombia para la búsqueda de inmuebles. El script utiliza Selenium para interactuar con el sitio web y extrae información como el título, precio, ubicación, área, número de habitaciones, baños y genera un archivo CSV con los datos recopilados, incluyendo el precio por metro cuadrado (m²).
- Node.js (v14 o superior)
- Chrome WebDriver instalado y accesible en tu PATH.
Node.js es un entorno que permite ejecutar JavaScript fuera del navegador, y es necesario para ejecutar este proyecto.
-
Windows / MacOS / Linux:
- Ve a la página oficial de Node.js: https://nodejs.org/
- Descarga la versión recomendada para tu sistema operativo (la que dice "LTS" es la más estable).
- Sigue las instrucciones de instalación que aparecerán según tu sistema operativo.
Una vez que Node.js esté instalado, puedes verificar que la instalación fue exitosa abriendo una terminal o línea de comandos y escribiendo:
node --version
Deberías ver un número que indica la versión de Node.js instalada (por ejemplo:
v14.17.0
).
-
Descargar el código:
- Si el proyecto está en un repositorio (como GitHub), puedes descargarlo de varias maneras:
-
Opción 1: Descargar el código como un archivo ZIP:
- Ve al repositorio y haz clic en el botón "Code" y luego en "Download ZIP".
- Extrae el archivo ZIP en una carpeta de tu computadora.
-
Opción 2: Usar Git (solo si estás familiarizado con Git):
- Abre la terminal o línea de comandos y escribe:
git clone https://github.com/tu-repositorio/scraper-fincaraiz.git
- Este comando descargará el proyecto en tu computadora.
- Abre la terminal o línea de comandos y escribe:
-
- Si el proyecto está en un repositorio (como GitHub), puedes descargarlo de varias maneras:
-
Acceder a la carpeta del proyecto:
-
Una vez descargado, abre la carpeta donde se encuentra el proyecto. Si estás en una terminal, navega a esa carpeta usando el comando
cd
:cd carpeta-donde-esta-tu-proyecto
-
Este proyecto necesita algunas "dependencias" o librerías adicionales para funcionar correctamente. En este caso, esas dependencias se encuentran listadas en un archivo llamado package.json
. Vamos a instalar estas dependencias usando un comando muy sencillo.
-
Abre una terminal o línea de comandos.
-
Asegúrate de estar en la carpeta donde descargaste el proyecto.
-
Ejecuta el siguiente comando:
npm install
Este comando instalará automáticamente todas las librerías necesarias para que el scraper funcione. Puede tomar un par de minutos, dependiendo de tu conexión a internet.
Este proyecto utiliza Selenium, una herramienta que controla el navegador para realizar el scraping. Por defecto, usa el navegador Google Chrome.
- Instalar Chrome WebDriver:
- Chrome WebDriver es un controlador que permite a Selenium automatizar Chrome. Debes descargarlo e instalarlo siguiendo estos pasos:
- Ve a la página de descarga de ChromeDriver: https://sites.google.com/chromium.org/driver/
- Descarga la versión que corresponda a tu versión de Chrome. Para saber qué versión de Chrome tienes, abre Chrome y escribe
chrome://settings/help
en la barra de direcciones. - Una vez descargado, descomprime el archivo y mueve el archivo ejecutable a una ubicación accesible, como el escritorio o una carpeta específica.
- Añade el archivo ejecutable a tu PATH (esto permitirá que Selenium lo encuentre automáticamente):
-
Windows: Sigue esta guía de Microsoft para agregar ChromeDriver a tu PATH.
-
MacOS / Linux: Mueve el ejecutable a
/usr/local/bin
usando el siguiente comando en la terminal:sudo mv /ruta-donde-se-descargó/chromedriver /usr/local/bin ```cución del Script
-
- Chrome WebDriver es un controlador que permite a Selenium automatizar Chrome. Debes descargarlo e instalarlo siguiendo estos pasos:
Para ejecutar el scraper, debes proporcionar un input en formato JSON que especifique los parámetros de la búsqueda, como la opción de tipo de operación (arriendo o venta), la ciudad, el número máximo de páginas a scrapear, y el tipo de propiedad.
Ejemplo de ejecución:
node scrape.js '{"option": "rent", "city": "el-dorado/envigado", "maxPages": 10, "propertyTypes": ["apartamentos"]}'
option
: Obligatorio. Define si estás buscando inmuebles en "arriendo" (rent
) o "venta" (sale
).city
: Opcional. La ciudad o sector que deseas scrapear. Ejemplos:"bogota"
"medellin"
"el-dorado/envigado"
maxPages
: Opcional. Número máximo de páginas que deseas scrapear. El valor predeterminado es100
.propertyTypes
: Opcional. Lista de tipos de propiedades que deseas scrapear. Ejemplos:["apartamentos"]
["casas", "apartamentos"]
Cómo obtener los valores correctos para city
y propertyTypes
utilizando los filtros de la página web
Si deseas obtener los nombres exactos para el campo city
o propertyTypes
, puedes hacerlo jugando con los filtros directamente en el sitio web de FincaRaíz. Aquí te explicamos cómo:
-
Abre el sitio web de FincaRaíz y ajusta los filtros según los inmuebles que deseas buscar.
-
Selecciona la ubicación y otros filtros como el tipo de propiedad, precio, entre otros.
-
Observa la URL en la barra de direcciones del navegador. La URL refleja los filtros que has seleccionado, y es donde puedes encontrar los valores exactos para
city
ypropertyTypes
. -
Identifica los valores de
city
ypropertyTypes
. Al observar la URL, puedes encontrar fácilmente los nombres que necesitas utilizar en tu input JSON.Por ejemplo:
-
URL generada:
https://www.fincaraiz.com.co/venta/apartamentos-y-casas-campestres/envigado?&ordenListado=3
-
Aquí, puedes observar que:
envigado
es el valor que debes usar para el campocity
.apartamentos-y-casas-campestres
indica los tipos de propiedad, lo que corresponde a los valores["apartamentos", "casas-campestres"]
.
-
A partir de la URL generada, tu city
y propertyTypes
en el input JSON serían los siguientes:
{
"option": "sale",
"city": "envigado",
"maxPages": 10,
"propertyTypes": ["apartamentos", "casas-campestres"]
}
De esta manera, puedes ajustar tanto la ciudad como los tipos de propiedad que deseas scrapear utilizando los filtros de la página web y observando cómo se reflejan en la URL.
- URL:
https://www.fincaraiz.com.co/venta/apartamentos-y-casas-campestres/envigado?&ordenListado=3
- city:
"envigado"
- propertyTypes:
["apartamentos", "casas-campestres"]
Jugando con los filtros de la página de FincaRaíz y observando cómo se estructura la URL, puedes obtener los valores exactos tanto para city
como para propertyTypes
. Esto asegura que los parámetros que pasas al script sean precisos y coincidan con los disponibles en FincaRaíz, permitiendo un scraping eficiente y específico.
{
"option": "rent",
"city": "el-dorado/envigado",
"maxPages": 10,
"propertyTypes": ["apartamentos"]
}
El script navega por las páginas de resultados en FincaRaíz y extrae la siguiente información de cada propiedad:
- Título: El título de la propiedad.
- Precio: El precio de la propiedad.
- Ubicación: La ciudad o sector de la propiedad.
- Área: El área de la propiedad en metros cuadrados (m²).
- Habitaciones: El número de habitaciones.
- Baños: El número de baños.
- Precio por m²: El precio dividido por el área.
- URL: El enlace directo a la página de la propiedad.
El resultado se guarda en un archivo properties.csv en el directorio donde se ejecuta el script.
El archivo generado properties.csv tendrá el siguiente formato:
Title | Price | Location | Area (m²) | Rooms | Bathrooms | Price per m² | URL |
---|---|---|---|---|---|---|---|
Casa en Arriendo | 175000000 | Envigado | 310 | 3 | 3 | 5645.16 | https://fincaraiz.com.co/inmueble/123456 |
Apartamento en Venta | 108000000 | Medellín | 160 | 2 | 2 | 6750.00 | https://fincaraiz.com.co/inmueble/654321 |
En algunas ocasiones, FincaRaíz puede mostrar un modal emergente en el primer acceso. El script incluye una función que cierra automáticamente el modal presionando la tecla Escape, asegurando que el scraping no se vea interrumpido.
- El scraping está limitado por la estructura de la página de FincaRaíz. Si el sitio cambia su diseño o estructura, es posible que necesites actualizar los selectores utilizados en el script.
- Para evitar sobrecargar el servidor, se recomienda establecer un límite razonable de páginas a scrapear (
maxPages
).
- Element not interactable: Si el modal bloquea el acceso a los elementos, asegúrate de que la función
handleModal
esté correctamente configurada para tu entorno. - Timeouts: Si el sitio tarda mucho en cargar, puedes ajustar los tiempos de espera (
timeouts
) en la funcióndriver.wait()
.
Este script fue creado por xBlaxk. Si tienes preguntas o sugerencias, no dudes en ponerte en contacto.