Skip to content

Lautarotetamusa/LeadsExtractor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Objetivo del proyecto

El objetivo de este proyecto es extraer la información de Leads de diferentes portales inmobiliarios. Para cada portal extraeremos toda la información de los diferentes leads y la volcaremos en un archivo de google sheets. Para cada lead, en los portales donde sea posible, se les enviará un mensaje generado automaticamente apartir de los datos de ese lead y un formato predifinido. Este proyecto permitirá acelerar el proceso de seguimiento de los leads automatizando las actividades mas repetitivas através de Digital workers.

Los portales con los que trabajaremos por ahora serán:

Proceso Testing Whatsapp

  • Ir a la pestaña Acciones del panel de Rebora.
  • Clickear "Set as main" en el flow "TESTING leads nuevos" Este flow ahora estará configurado como principal (main)
  • Enviar cualquier mensaje de whatsapp al numero de Rebora, estarás actuando como si fueses un lead nuevo.
  • Revisar que se realicen todas las acciones esperadas para un lead nuevo, mensajes, imágenes, etc.
  • Ir a la pestaña de Logs en en el panel
  • Revisar los últimos logs y buscar algun error
  • Volver a setear como main el flow "Respuesta"

Estado del proyecto

  • Fase de investigacion y testeo
  • Fase de desarrollo

To do:

  • Enviar mensajes
  • inicio de sesion
  • Detectar token vencido y volver a loggearnos
  • Fase de investigacion y testeo
  • Fase de desarrollo
  • Primera corrida

To do:

  • Detectar token vencido y volver a loggearnos
  • Fase de investigacion
  • Fase de desarrollo
  • Primera corrida

To do:

  • Detectar token vencido y volver a loggearnos
  • Fase de investigacion
  • Fase de desarrollo
  • Primera corrida

To do:

  • Detectar token vencido y volver a loggearnos

El objecto lead, estructura

Todos los objectos que representan la informacion de un lead están estandarizados con el siguiente formato:

{
    "fuente": "string",
    "id": "string",
    "fecha": "string",
    "nombre": "string",
    "link": "string",
    "telefono": "string",
    "email": "string",
    "propiedad": {
        "id": "string",
        "titulo": "string",
        "link": "string",
        "precio": "string",
        "ubicacion": "string",
        "tipo": "string",
    },
    "busquedas": {
        "zonas": "string", //zonas separadas por comas
        "tipo": "string", 
        "presupuesto": "string",
        "cantidad_anuncios": "string",
        "contactos": "string", //cantidad de contactos que realizo
        "inicio_busqueda": "string", //min - max
        "total_area": "string", //min - max
        "covered_area": "string", //min - max
        "banios": "string", //min - max
        "recamaras": "string", //min - max
    }
}

Mapping

En el archivo mapping.json configuraremos qué columnas de nuestro archivo google sheets están conectadas con qué campos de nuestros objectos lead.

mapping.json:

{
    "Fecha": "fecha", 
    "Fuente": "fuente", 
    "Nombre del lead": "nombre", 
    "Link a consulta": "link", 
    "Telefono 1": "telefono", 
    "Telefono 2": "", 
    "Email": "email", 
    "Titulo": "propiedad.titulo", 
    "Link": "propiedad.link", 
    "Precio": "propiedad.precio", 
    "Ubicación": "propiedad.ubicacion", 
    "Tipo": "propiedad.tipo", 
    "Zonas": "busquedas.zonas",
    "Mt2 terreno": "busquedas.total_area",
    "Mt2 construcción": "busquedas.covered_area", 
    "Baños": "busquedas.banios", 
    "Recámaras": "busquedas.recamaras", 
    "Presupuesto": "busquedas.presupuesto", 
    "Anuncios vistos": "busquedas.cantidad_anuncios", 
    "# anuncios contactados": "busquedas.contactos", 
    "Hace cuanto empezo a buscar": "busquedas.inicio_busqueda",
    "Mensaje": "message"
}

Las claves a la derecha inidican el nombre de la columna en el google sheet. Los valores a la izquierda indican que campo del objecto lead utilizaremos, un punto (.) indica que usamos una propiedad dentro de otra, por ejemplo busquedas.presupuesto indica que dentro de la 'busquedas' tomamos la propiedad 'presupuesto'.

Programacion de los scrapers

Los scrapers estan por defecto programados cada 4 horas entre las 10 y las 18hs. Esto se puede cambiar en el archivo crontab utilizando la sintaxis de cron

Aqui podemos generar crons para las horas que querramos

crontab:

0 10-18/4 * * * python /app/inmuebles24/inmuebles24.py > /proc/1/fd/1 2> /proc/1/fd/2

Cambiando 0 10-18/4 * * * podemos programar los scrapers cuando querramos.

Ejecutar scripts

Para ejecutar los scripts deberemos primero asegurarnos de tener instalados todos los requerimientos del archivo requirements.txt. Luego ejecutaremos el siguiente comando:

python -m scripts.{script}

Es importante mencionar que no pondremos la extension .py al ejecutar el comando

El archivo .env

El archivo .env será donde se configurarán todas las claves necesarias para correr el proyecto.

CASASYTERRENOS_USERNAME=""
CASASYTERRENOS_PASSWORD=""

INMUEBLES24_USERNAME=""
INMUEBLES24_PASSWORD=""

LAMUDI_USERNAME=""
LAMUDI_PASSWORD=""

PROPIEDADES_USERNAME=""
PROPIEDADES_PASSWORD=""

SHEET_ID=""

ZENROWS_APIKEY=""

CRON="0 10-18/4 * * *"

<PORTAL>_USERNAME: Nombre de usuario o correo de la cuenta del <PORTAL>
<PORTAL>_PASSWORD: Contraseña para el username del <PORTAL>
SHEET_ID:
Es el id del archivo de google sheet donde se guardará la información de los leads.
El archivo deberá tener en la primera fila (headers) los mismos campos indicados en el archivo mapping.json ZENROWS_APIKEY: Es la clave de ZenRows. \

Instalacion

Instalar docker

Buildear el contenedor

docker compose build

Ejecutar el contenedor

docker compose up -d

Detener el contenedor

docker compose stop

Ejecutar algun scraper en particular sin esperar

docker compose run app python main.py <PORTAL> PORTALS:

  • casasyterrenos
  • propiedades
  • lamudi

Instalacion sin docker

python -m venv .venv

source .venv/bin/activate

pip install -r requeriments.txt

Ejecutar algun scraper en particular sin esperar

python main.py <PORTAL> PORTALS: - casasyterrenos - propiedades - lamudi

Microsoft integration

La usamos para almacenar imagenes

Documentacion

Descargar archivos de OneDrive Repo para descargar archivos Microsoft Oauth2 flow

Pasos para obtener credenciales

  1. Registrar una aplicacion

Posibles mejoras

  • Diseñar y desarrollar una base de datos, esto permitiría conectar los datos de los diferentes portales sin repetir información, lo que permitiría un mejor manejo de la información.
  • Nuevos portales.

About

Process automation for real state company, Rebora.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •