La primera es la grande: trece mil trescientas treinta y tres líneas que abren Google o Bing directamente en Chrome para generar candidatos y luego navegan con Playwright sobre un perfil persistente. El modelo es local: Ollama por su endpoint de chat compatible, con qwen2.5:7b. Cero claves de pago, cero datos que salen del equipo, coste marginal nulo por consulta.
Cuando el modelo se atasca, manda el humano. El programa detecta pantalla de consentimiento, CAPTCHA, inicio de sesión, error 429 o bloqueo directo, y en ese caso entrega la ventana de Chrome al usuario; vuelve a comprobar la página al pulsar ENTER, y acepta una S para saltar esa búsqueda. No intenta resolver por fuerza bruta lo que solo una persona puede resolver. El proxy es único y lo pongo yo: no rota direcciones para eludir bloqueos. Si un sitio dice que no, se para.
Las búsquedas de contactos, la comprobación de sesión y el extractor de perfiles comparten el mismo perfil de Chrome, así que el inicio de sesión se reutiliza. Identidad nativa del navegador instalado, idioma español, zona horaria de Madrid y seis segundos de pausa entre búsquedas. Guardar las cookies evita perder sesiones y reduce peticiones innecesariamente rápidas.
La segunda son cinco mil seiscientas sesenta y siete líneas que recorren perfiles públicos. Lo interesante no es el recorrido: es que está diseñada para que el sector sea un parámetro, no reescribir el programa. Y la tercera, mil novecientas seis líneas sin un solo modelo, es la que mejor ingeniería tiene de las tres.
AiTattooScraper búsqueda web + Chrome persistente + Ollama local
InstagramTattooFinder perfiles públicos · dos sectores aislados
ApiPlacesTattoo Places API (New) · retícula sobre el IGN
│
└──▶ SQLite por herramienta ──▶ CSV limpios ──▶ CRM (caso 01)