En una entrevista técnica en vivo me pidieron construir un scraper para ncnotices.com, una base de datos de avisos públicos de Carolina del Norte. El reto incluía una aplicación ASP.NET clásica con gestión de estado, paginación y protección con CAPTCHA, y además había tiempo limitado. El equipo del entrevistador usaba Puppeteer, pero decidí tomar otro camino más ligero y orientado a producción.

Por qué no usar Puppeteer. Puppeteer es excelente en muchos escenarios, pero en este caso fue como llevar un tanque a una pelea de cuchillos. Ejecutar instancias headless de Chrome consume memoria y tiempo de arranque, complica la gestión del ciclo de vida del navegador y es más lento en escenarios donde no hace falta ejecutar JavaScript porque el sitio renderiza en servidor.

La solución que implementé combina un cliente HTTP ligero con parseo HTML rápido y firma TLS para pasar por detectores básicos de bots. Las piezas clave fueron Cheerio para parseo tipo jQuery de HTML, Impit para imitar fingerprints TLS de navegadores reales y tough-cookie para manejar cookies y sesiones. Esta combinación reduce consumo de RAM y acelera las peticiones manteniendo la capacidad de pasar por detecciones simples que esperan tráfico parecido al de un navegador real.

Retos técnicos principales. Primero, ASP.NET usa tokens de estado como __VIEWSTATE y __VIEWSTATEGENERATOR. Hay que extraer esos tokens ya sea de campos ocultos o del texto de respuesta y reenviarlos en cada POST. Segundo, la paginación clásica de ASP.NET requiere simular interacciones de usuario enviando parámetros concretos en formularios asíncronos, lo que obliga a encadenar el estado entre páginas. Tercero, el sitio muestra reCAPTCHA de forma ocasional, así que diseñé una interfaz de solver extensible que permite enchufar servicios externos de resolución sin cambiar la lógica del scraper. Por último, la gestión de sesiones y cookies se realiza con un cookie jar persistente para mantener continuidad entre peticiones.

Flujo completo resumido. Se obtiene la configuración inicial y los tokens de estado, se envía la petición de búsqueda simulando el formulario, se parsean resultados con Cheerio y se actualizan los tokens para la siguiente página. Este ciclo se repite hasta agotar la paginación y se devuelven todos los ítems extraídos. El diseño está orientado a pruebas y a inyección de dependencias para facilitar mantenimiento y reuso.

Comparativa de rendimiento. Para un escenario realista de 100 avisos distribuidos en 10 páginas: usando Puppeteer la carga del navegador y las visitas a páginas consumen cientos de milisegundos por petición y decenas de MB por instancia. Con Cheerio e Impit la latencia por petición baja considerablemente y el consumo de memoria por instancia se reduce drásticamente. En números aproximados la solución ligera fue alrededor de 3 veces más rápida y tuvo una huella de memoria 15 veces menor en el ejemplo evaluado, lo que mejora la concurrencia y reduce costes cuando se escala sobre instancias limitadas.

Lecciones aprendidas. Elegir la herramienta correcta según el objetivo importa tanto como la implementación. Si el objetivo es extraer HTML de páginas renderizadas en servidor, ejecutar un navegador completo suele ser exceso de recursos. Imitar fingerprints TLS con bibliotecas como Impit ayuda a sortear detecciones simples sin la sobrecarga de un navegador. Y cuando trabajas con aplicaciones ASP.NET, la gestión de __VIEWSTATE y otros tokens es crucial para que la paginación y las búsquedas funcionen de forma fiable. Diseñar una interfaz para resolución de CAPTCHA hace el scraper extensible frente a cambios en la forma en que aparece el reto.

Resultado y aprendizaje personal. Terminé el scraper dos horas después de la entrevista y lo envié al entrevistador. No obtuve el puesto, pero recibí comentarios muy elogiosos sobre la calidad técnica y la creatividad de la solución. A veces el mejor resultado no es el empleo, sino demostrar habilidades, aprender y compartir código del que uno se siente orgulloso.

En Q2BSTUDIO aprovechamos enfoques como este para desarrollar soluciones robustas y eficientes. Somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida, con experiencia en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Si buscas construir una herramienta a medida o escalar procesos con soluciones inteligentes, podemos ayudar. Conoce nuestras soluciones de software a medida y explora cómo incorporamos IA en proyectos empresariales con nuestros servicios de inteligencia artificial.

Si te interesa probar una arquitectura parecida, valora usar un cliente HTTP optimizado, Cheerio para parseo, una librería de fingerprinting TLS y un cookie jar robusto. Diseña interfaces para CAPTCHA y mantén la gestión de estado centralizada para lidiar con aplicaciones ASP.NET. Y si prefieres externalizar el desarrollo, en Q2BSTUDIO asesoramos en arquitectura, desarrollo de aplicaciones, ciberseguridad y plataformas cloud para entregar soluciones empresariales eficientes y seguras.

Te invito a compartir tu experiencia con scraping, gestión de estado en aplicaciones web o detección de bots. ¿Has enfrentado desafíos similares con __VIEWSTATE, paginación o protección anti bot? En Q2BSTUDIO podemos colaborar para transformar esas necesidades en productos escalables y mantenibles.