¿Cuál es el mejor rastreador web de código abierto (navegar en el sitio usando el formulario) y por qué?

Lo sentimos, no voy a responder esto directamente: no conozco los rastreadores versátiles de extremo a extremo. Puede haber algunos, pero si habla en serio, puede ser mejor construir uno propio que resuelva la tarea exacta que tiene y se adapte a su infraestructura. Hay una gran cantidad de trabajos de investigación y algunos componentes listos que pueden ayudar.

Estoy sugiriendo que construyas la tuya porque la tarea que tienes es importante. Por ejemplo, el rastreador web profundo de Google (ver https://homes.cs.washington.edu/…) quiere echar un vistazo a lo que está disponible detrás de un formulario, no necesariamente todo el contenido sobre un tema determinado. Pero si está creando un motor de búsqueda vertical, el rastreador puede querer mantenerse en el tema y obtener la mayor cantidad de contenido relevante posible; cambia la forma en que debería funcionar. Lo que significa “mejor” no está claro, no existe una solución única para todos.

Dicho esto, hay componentes de código abierto que puedes combinar para crear una solución. Scrapy y Nutch son dos marcos de rastreo populares. No he trabajado con Nutch, pero Scrapy es muy versátil y ciertamente es posible construir un rastreador web profundo sobre él.

Como dijiste, para manejar Deep Web es necesario manejar formularios web. Existen 4 problemas principales con los formularios que preocupan a las personas:

  • cómo encontrar páginas con formularios para enviar;
  • cómo elegir qué formularios enviar (clasificar formularios);
  • cómo manejar formularios de entradas múltiples de manera eficiente: detectar qué valores acepta entradas (por ejemplo, texto / fechas / números / …), enviar valores sin probar todas las combinaciones posibles;
  • cómo elegir qué palabras clave enviar.

Hay bibliotecas de código abierto que pueden ayudar a interactuar con los formularios; consulte, por ejemplo, TeamHG-Memex / Formasaurus.

Para encontrar páginas de forma inteligente, se puede utilizar algo como ViDA-NYU / ache crawler. No he verificado la implementación del software, pero el enfoque descrito en http://vgc.poly.edu/~juliana/pub… se ve genial (soy fanático); es fácil de entender y debe ser bastante fácil de implementar para una persona familiarizada con ML si abandona algunas partes del documento (use un truco de hash y un clasificador en línea regularizado L1 en lugar de su “Automatización del proceso de selección de funciones”).

Cómo manejar los formularios es un tema de investigación, y existe una gran cantidad de literatura al respecto.

Prequery Discovery of Domain-Specific Query Forms (2013) proporciona una encuesta sobre métodos para encontrar y clasificar formularios web.

Hay muchos documentos sobre cómo seleccionar palabras clave para enviar a los formularios de búsqueda / consulta de rastreo de manera eficiente. Algunos:

  1. El rastreo web profundo de Google (2008) tiene información sobre los algoritmos utilizados por Google en 2008;
  2. Selección de consultas de la muestra para rastrear fuentes de datos de la web profunda (2012): cómo seleccionar palabras clave / consultas para enviar
  3. Rastreo de web oculta sensible al tema (2012): cómo seleccionar palabras clave para usar con los formularios de búsqueda del sitio web (y cómo expandir el conjunto de palabras clave) para mantenerse en el tema.
  4. Descargar contenido web oculto textual a través de consultas de palabras clave (2005): cómo seleccionar palabras clave
  5. Aprendizaje del rastreo web profundo con diversas funciones (2009): cómo seleccionar palabras clave
  6. Rastreo eficiente en la web profunda mediante el aprendizaje por refuerzo (2010): cómo seleccionar palabras clave
  7. Algoritmos óptimos para rastrear una base de datos oculta en la web (2012): un algoritmo para elegir qué información enviar en los formularios de búsqueda / consulta (con muchos campos), con algunas matemáticas

Una tarea relacionada es clasificar los campos de formulario (es decir, detectar qué campo es qué, qué tipo de datos debe ingresar el rastreador a cada uno de los campos). Ver, por ejemplo, Opal: comprensión automatizada de formularios para la web profunda (2012) – sistema de clasificación de formulario y campo de formulario. La biblioteca de código abierto de Formasaurus (mencionada anteriormente) clasifica los formularios y campos utilizando diferentes métodos.

Aquí hay descripciones de algunos de los sistemas de rastreo de extremo a extremo:

  1. Rastreo de páginas de entidades web profundas (2013): otro documento de Google sobre el rastreo de entidades, en lugar de documentos de texto. Nuevamente, el objetivo es obtener una cobertura representativa, no una cobertura de contenido exhaustiva.
  2. Creación y exploración de repositorios de formularios web (2010): rastreador ACHE + clasificación de formularios + clasificación de campos de formularios
  3. E-FFC: un rastreador centrado en formularios mejorado para bases de datos web profundas específicas de dominio (2013) – un sistema completo: rastreador similar a ACHE pero con algunas mejoras que vale la pena mirar, detector de formularios / clasificador de relevancia, remitente de formularios. El rastreador se evalúa rastreando solo 15k páginas (no, por ejemplo, 15k dominios).
  4. Búsqueda de interfaces en la web de consulta y caracterización (2008) – Tesis doctoral. Una buena descripción general de un dominio problemático (Deep Web, etc.) + una descripción de un sistema de rastreo concreto que maneja formularios web y JavaScript. La tesis propone un lenguaje de consulta; no parece relevante para nosotros, y no entendí para qué sirve. Proporciona una buena sugerencia: si los sitios web son diferentes, para una buena estimación es mejor utilizar un muestreo aleatorio estratificado. Parte de clasificación de formulario: resultados similares a Formasaurus (los números informados son peores, pero la tarea es un poco diferente, por lo que no podemos compararla). Menciona el algoritmo RoadRunner que compara varias páginas y descubre contenido estructurado basado en eso. El sistema propuesto maneja formularios basados ​​en Flash analizando archivos Flash usando alguna biblioteca de Perl. Parece que JavaScript se maneja analizando fragmentos de código JS cortos en la página HTML (por ejemplo, validadores de campo de formulario incrustados), no representando páginas con un navegador.

Hay muchas maneras de manejar JavaScript: PhantomJS, Selenium, Splash, etc. Tendrá que escribir scripts personalizados que funcionen para muchos sitios web (un ejemplo básico: TeamHG-Memex / scrash-lua-examples; puede beneficiarse de ML- más inteligente) algoritmos basados); cosas como el desplazamiento infinito son fáciles de manejar, otras son más difíciles. AFAIK es un tema de investigación sin una solución lista para usar. Probablemente lo más listo para usar que pueda encontrar es crawljax / crawljax: consulte Crawling Ajax-Based Web Applications a través del análisis dinámico de los cambios de estado de la interfaz de usuario y Web oculta inducida por secuencias de comandos del lado del cliente: documentos de estudio empíricos para obtener más detalles ; parece que para usos de producción no son lo suficientemente rápidos en cuanto a velocidad, pero al menos vale la pena considerar las ideas.

Probablemente aparecerán nuevos programas y publicaciones en la página del proyecto DARPA Memex (DARPA – Open Catalog), podría ser una buena idea vigilarlo.

Si tuviera que construir un rastreador web oscuro, podría incorporar una herramienta de prueba como Selenium con un navegador como Firefox con Tor correctamente instalado y configurado.

PD. Noté que era profundo y no oscuro. La parte Tor es opcional.