Un comercio con miles de referencias no sabe a qué precio vende su competencia. Puede mirar a mano media docena de productos estrella; el resto del catálogo es una nube. Nicole fue el motor que recorría el mercado entero cada noche para contestar, cada mañana, una sola pregunta: en qué productos ganamos y en cuáles perdemos.
Rastrear la web ajena es fácil de hacer mal. Lo difícil no es sacar los datos: es sacarlos sin convertirte en un problema para quien te los da.
El encargo tenía tres obstáculos, y solo uno era el evidente. Recorrer catálogos ajenos de forma sostenible, sin castigar los servidores de nadie y sin esconderse. Saber que dos fichas de dos tiendas distintas son el mismo producto, cuando cada tienda le pone su propio código, su propio título y su propia foto. Y sostener un trabajo que no cabe en una máquina y que no termina nunca.
Una recorría, otra reconocía y la tercera comparaba. Ninguna servía sin las otras dos.
Descubría los catálogos entrando por la puerta que cada sitio publica para los buscadores, y volvía sobre ellos con su propio calendario.
Leía de cada ficha los datos que la propia tienda publica en abierto para que los buscadores la entiendan, con varios formatos de respaldo.
Cruzaba el catálogo propio con el del mercado y emitía cada mañana el informe que justificaba todo lo anterior.
Cuando un sitio respondía con el código que significa «vas demasiado rápido», el sistema no reintentaba ni cambiaba de identidad: aumentaba su propia espera para ese sitio y se detenía cinco minutos. El ajuste quedaba guardado, así que la siguiente vez ya empezaba más despacio.
Comparar precios cotejando títulos a ojo no funciona. El número que hay bajo el código de barras lo asigna el fabricante, no el vendedor, así que es el mismo en todas las tiendas del mundo. Esa fue la llave que hizo posible la comparación.
Arrancar, parar y repartir el trabajo entre varias máquinas no se hacía entrando en cada una: se hacía cambiando un renglón en la base de datos. Cada servidor consultaba qué le tocaba y obedecía.
Cuatro cosas que decidían si el sistema podía funcionar durante meses o se quemaba en la primera semana.
Un rastreador mal educado tumba servidores, acaba bloqueado y deja a su dueño en una conversación incómoda. La tentación es esconderse y seguir. Aquí se hizo lo contrario, y esa decisión es la que permite contar este caso.
El sistema no adivinaba direcciones: leía el archivo que cada sitio publica para los buscadores, sacaba de ahí los mapas del catálogo y seguía lo que el propio comercio había puesto ahí para ser encontrado.
El rastreador se presentaba con el nombre del robot, su versión y una dirección donde se explicaba qué hacía. Quien recibiera la visita sabía quién era y a quién reclamar.
Al recibir el código que indica exceso de peticiones, el robot aumentaba su espera para ese sitio y se detenía. Aprendía el ritmo que cada servidor toleraba, y no lo olvidaba.
Los mapas del catálogo indican cuándo cambió cada sección. El sistema los respetaba y no volvía a descargar lo que seguía igual: menos carga para el otro y menos tiempo para nosotros.
Un rastreador que se identifica, entra por donde debe y se frena cuando molesta es un vecino. Uno que se disfraza y machaca es un problema.
Cada tienda inventa su propio código interno, redacta su propio título y hace su propia foto. Dos fichas del mismo objeto pueden no compartir ni una palabra. Sin resolver esto, no hay comparación posible y todo lo demás sobra.
El número del código de barras lo asigna el fabricante del producto, no quien lo vende. Es el único dato de una ficha que significa lo mismo en todas las tiendas.
Las tiendas lo publican en sus datos estructurados para que los buscadores las entiendan. El sistema lo leía de ahí, junto con marca, modelo, condición y disponibilidad.
No todas las tiendas etiquetan igual. Si no había datos estructurados se intentaba con microdatos, y si tampoco, con las etiquetas sociales de la página. Cada formato cubría los huecos del anterior.
Una ficha solo entraba en el índice como producto si tenía al menos una referencia identificable. Lo que no se podía identificar no se guardaba: un índice lleno de basura no se puede comparar.
Con esa llave, dos catálogos que no comparten ni una palabra se vuelven comparables renglón a renglón.
Rastrear un mercado entero no cabe en un servidor, y varios servidores haciendo lo mismo es peor que uno solo: gastas el doble para obtener la mitad, y molestas al doble de sitios.
El trabajo se repartía por tramos del índice, de modo que dos procesos nunca tomaban las mismas direcciones. Añadir capacidad era añadir tramos.
Arrancar o parar un proceso en cualquier máquina de la flota se hacía cambiando su estado en una tabla. Cada servidor consultaba lo suyo y obedecía sin que nadie entrara en él.
Cada tarea corría dentro de un bucle supervisado: si el proceso moría por un dato inesperado, volvía a arrancar sin intervención. En un trabajo que dura meses, morir es normal; quedarse muerto, no.
Cada máquina reportaba su carga, su memoria y su disco. Si la carga superaba lo que sus procesadores aguantaban, el propio servidor apagaba una de sus tareas sin preguntar.
Una flota que se reparte el trabajo, se recupera sola de sus caídas y se frena antes de ahogarse.
Un catálogo ajeno cambia todos los días: productos que se descatalogan, direcciones que se rompen, secciones que se reorganizan. Un índice que no gestiona sus muertos deja de valer en unos meses.
Cada dirección llevaba dos fechas separadas: cuándo se buscó en ella y cuándo se le extrajo el contenido. Así una fase podía ir deprisa sin arrastrar a la otra.
Si una dirección empezaba a fallar pero tenía productos asociados, no se eliminaba: se aplazaba unos días. Muchos errores son temporales, y borrar el historial de precios de un producto es irreversible.
Si volvía a fallar igual y no tenía nada que perder, se eliminaba del índice. Cargar con direcciones muertas es pagar cada noche por nada.
Cada pasada atendía primero lo que jamás se había revisado y solo después lo ya revisado hace tiempo. El índice crecía antes de refrescarse.
El índice se mantenía vivo solo, que es la diferencia entre un rastreo y una foto vieja.
Rastreo web hecho con oficio: el que sostiene una operación durante meses sin dejar un rastro de servidores molestos detrás.
Nicole estuvo en producción y hoy no está en marcha. Lo publicamos porque el trabajo fue real y las decisiones que se tomaron ahí siguen siendo las que tomaríamos hoy.
Fue un encargo bajo confidencialidad. Contamos qué construimos y cómo, sin decir para quién ni en qué mercado. Eso no es negociable aunque el proyecto haya terminado.
El rastreador se presentaba con su nombre, entraba por donde el sitio publica y se frenaba ante la señal de freno. Si un proyecto no se puede hacer así, la conversación que toca es otra.
Esta página salió de una revisión del código que escribimos, no de un folleto. Lo que no encontramos funcionando, no está aquí.
Un motor de rastreo completo —descubrimiento, extracción, homologación y comparación— repartido entre varias máquinas y sostenido en el tiempo.
No en tus diez productos estrella: en todo tu catálogo, y cada mañana. Recoger datos de la web ajena de forma sostenible y convertirlos en una decisión de negocio es un oficio, y es el nuestro.