¿Estás visitando desde ?
Ingresá a Linware ⯈
Continuar en Linware Argentina ⯈
×
¿Qué estás buscando?
BUSCAR!
BLOG
Creación de un rastreador web escalable y fácil de usar para Elastic Enterprise Search
Publicada el 13/01/2021

Indexar la web es difícil. Hay un suministro casi infinito de sitios que se comportan mal, estándares mal aplicados (o ignorados), contenido duplicado y casos de esquina con los que lidiar. Es una gran tarea crear un rastreador web fácil de usar que sea lo suficientemente completo y flexible para dar cuenta de todos los diferentes contenidos que encuentra. En el espíritu de nuestras raíces de código abierto, queríamos compartir un poco sobre nuestro enfoque de estos desafíos a medida que creamos este nuevo y poderoso mecanismo de ingestión para Elastic Enterprise Search . 

Un poco de historia y desafíos de indexación que hemos aprendido a lo largo del camino

Hemos recorrido un largo camino desde que creamos la primera iteración de nuestro rastreador web hace unos ocho años (para el producto Swiftype Site Search: Swiftype y Elastic unieron fuerzas en 2017). Una versión renovada de ese rastreador web ha estado en producción en swiftype.com durante los últimos cinco años, y ahora maneja más de mil millones de páginas web por mes. Ahora estamos usando toda esa experiencia operando a escala para agregar un poderoso mecanismo de ingestión de contenido para la solución Elastic Enterprise Search. Este nuevo rastreador web escalable y fácil de usar permitirá a nuestros usuarios indexar contenido de cualquier fuente externa, mejorando aún más la imagen de ingestión de contenido para Elastic Enterprise Search.

Los siguientes son solo algunos de los desafíos interesantes que hemos encontrado, algunos obvios, otros no tanto, mientras trabajamos en lo que parece una simple tarea de indexar un montón de páginas HTML en un índice de búsqueda.

Deduplicar contenido

Uno de los problemas clave para un rastreador web es el rango de expectativas del usuario con respecto al proceso de eliminación de copias duplicadas de datos.

Por un lado, hay usuarios que siguen las mejores prácticas en cuanto a presentación de contenido y estructura de URL. No tienen ningún contenido duplicado y, cuando es necesario, se basan en URL canónicas, reglas de robots.txt y redireccionamientos para ayudar a los rastreadores web a manejar correctamente sus sitios. Esos sitios tienden a funcionar con cualquier software de rastreo web listo para usar.

Por otro lado, hay sitios que abusan de los estándares y no siguen las mejores prácticas. Algunos sistemas de gestión de contenido grandes y populares y herramientas de software de alojamiento de foros son especialmente problemáticos. Por razones desconocidas, abusan de las reglas de formato de contenido y URL hasta el punto en que un sitio pequeño podría generar fácilmente millones (!!!) de páginas aparentemente únicas. Las organizaciones que utilizan esas herramientas tienden a requerir una potente deduplicación de contenido y una funcionalidad de filtrado de URL.

Para permitir una gama tan amplia de diferentes estructuras de sitios web y expectativas hacia la calidad de la funcionalidad de deduplicación de contenido, hemos desarrollado un conjunto de características que permiten a los usuarios controlar qué contenido se indexa y cómo quieren definir la singularidad del contenido. Nuestro nuevo rastreador web tendrá una poderosa capacidad para especificar las reglas para identificar páginas únicas y garantizará que las páginas duplicadas se traten correctamente para cada caso de uso.

Identificar contenido

¿Qué deberíamos usar para identificar de forma única un fragmento de contenido en un sitio web? Parece una pregunta trivial. La mayoría de las personas (y los organismos de Internet que crean estándares) tienden a estar de acuerdo en que una URL es un identificador único de una página web. Desafortunadamente, la complicada realidad de Internet en acción rompe esta suposición con bastante rapidez. Por ejemplo:

  • Las páginas se mueven sin las redirecciones adecuadas, y los usuarios esperan que el contenido indexado se actualice en consecuencia sin tener partes de contenido duplicadas en su índice.
  • Se crean múltiples copias duplicadas de la misma página sin etiquetas URL canónicas, y los usuarios esperan una deduplicación correcta.

Queremos asegurarnos de que nuestro rastreador web cubra la gama más amplia de posibles escenarios de movimiento y actualización de contenido. Utilizará técnicas sofisticadas de hash de contenido y URL para mantener el contenido del índice de búsqueda incluso cuando el contenido y las URL se actualicen en presencia de múltiples copias duplicadas de los datos.

Hacer frente al incumplimiento de las normas

Desafortunadamente, Internet es en última instancia una colección casi ilimitada de páginas HTML rotas e implementaciones de protocolos HTTP y servidores web defectuosos. Cualquier rastreador web que valga su peso debe tener en cuenta una variedad de elementos rotos, como algunos de estos ejemplos memorables que hemos encontrado:

  • Enormes páginas HTML generadas automáticamente con millones de enlaces, donde el simple hecho de tratar de analizar una página de este tipo conduce inevitablemente a que un rastreador web se quede sin memoria.
  • Representación de contenido diferente según el valor del agente de usuario (también conocido como "encubrimiento de contenido"), lo que dificulta la depuración y la comprensión de lo que está sucediendo.
  • Códigos de respuesta HTTP 200 utilizados para respuestas de "Página no encontrada" combinados con un montón de enlaces rotos en el sitio.
  • El 100% del contenido de la página se codifica en una cadena de JavaScript y se representa con un document.write(¡y ningún otro JavaScript en la página!)

La experiencia de solucionar problemas y trabajar con cientos de casos como estos a lo largo de los años nos ha llevado a crear un conjunto de mecanismos defensivos y funciones de análisis de contenido. Estas características permitirán al rastreador web manejar casi cualquier tipo de contenido siempre que sea accesible a través de HTTP.

Gestión de ciclos de vida de rastreo

A lo largo de los años de rastreo de contenido de clientes, nos hemos dado cuenta de que es casi imposible predecir la duración del rastreo de un sitio web determinado. Incluso para sitios pequeños y simples, tuvimos casos en los que un rastreo demoraría muchos meses y debía detenerse manualmente. Con frecuencia, una combinación aleatoria de problemas con el sitio conduce a una explosión de URL de sitios únicos debido a un error en la implementación de protocolos estándar.

Estos son algunos de los "grandes éxitos" que hemos encontrado y que nos han provocado problemas en el ciclo de vida del rastreo:

  • Sitios que utilizan URL para almacenar el estado de la sesión HTTP (por ejemplo, foros antiguos y varios marcos web Java antiguos). Cada vez que un rastreador web visitaba una página, se le redirigía a una URL única que contenía un identificador de sesión (p. Ej., / Some / forum? Sid = 123456789), y cada visita posterior presentaba la misma página con una URL única diferente. .
  • Un enlace HTML relativo en la página de error "Página no encontrada" combinado con el sitio que utiliza códigos de respuesta HTTP 200 para todas las páginas de error. Cada URL incorrecta en el sitio se convertiría en una gran cantidad de páginas únicas que se verían como / foo / foo / foo / foo ....
  • Sitios web que utilizan componentes de URL para controlar / configurar el filtrado / clasificación de contenido en sus catálogos de productos (por ejemplo, / vestidos / color / rojo / tamaño / pequeño), lo que provoca una explosión de URL aparentemente únicas generadas al combinar diferentes filtros juntos (/ pequeño / color / rojo, etc.).

Como resultado de tal complejidad, definir claramente un rastreo terminado es complicado. Nuestro nuevo rastreador web incluirá una serie de heurísticas integradas, lo que le permitirá manejar una amplia gama de situaciones en las que los sitios web tardan mucho en indexarse. Se incluirán límites de longitud y profundidad de URL, límites de duración de rastreo, compatibilidad con la deduplicación basada en contenido y una serie de reglas que se centran en el contenido clave al tiempo que permiten ignorar las páginas rotas con enlaces profundos.

Añadiendo observabilidad

Un aspecto importante de cualquier operación de rastreo es comprender qué sucedió, qué decisiones tomó el sistema y por qué. El objetivo es ver cómo se descubrió cada página, se extrajo del servidor web, se analizó e introdujo en un motor o, cuando se produjeron problemas, qué falló y por qué.

Dado que el nuevo rastreador web se basa en Elasticsearch (la plataforma más popular para la indexación y el análisis de datos de registro en el mundo), hemos tomado una decisión desde el principio para crear la mayor cantidad de observabilidad posible en el sistema. Cada acción y decisión del rastreador web se captura e indexa en Elasticsearch. Los registros utilizan un formato de registro estructurado estándar de Elastic Common Schema para permitir una correlación más sencilla entre los diferentes registros y un análisis muy detallado de los eventos. Todos los eventos indexados están disponibles para su análisis utilizando todas las potentes capacidades de Kibana y se documentarán desde el primer día.

Que sigue

Esté atento a los anuncios y actualizaciones de productos relacionados con el rastreador web.

Si desea obtener más información sobre el rastreador web, consulte la presentación de Sprinting to a crawl de nuestro reciente evento virtual ElasticON Global (junto con docenas de otras presentaciones en todas las soluciones Elastic). Y, como siempre, puede agregar experiencias de búsqueda a su lugar de trabajo, sitios web y aplicaciones con Elastic Enterprise Search, con una prueba gratuita de Elastic Cloud por 14 días (o una descarga gratuita ).

Ir al Blog