Colección de citas famosas - Colección de versos - ¿Cuáles son las ventajas y desventajas de los marcos de rastreo de código abierto?

¿Cuáles son las ventajas y desventajas de los marcos de rastreo de código abierto?

¿Debería elegir Nutch, Crawler4j, WebMagic, scrapy, WebCollector u otros para desarrollar un rastreador web? Aquí hay una charla aleatoria basada en mi experiencia: los rastreadores mencionados anteriormente se pueden dividir básicamente en tres categorías: 1. Rastreadores distribuidos: Nutch

2 Rastreadores independientes de JAVA: Crawler4j, WebMagic, WebCollector

3. Rastreador independiente que no es JAVA: scrapy

La primera categoría: rastreador distribuido

Los rastreadores utilizan rastreadores distribuidos para resolver principalmente dos problemas:

1) Gestión masiva de URL

2) Velocidad de Internet

El rastreador distribuido más popular ahora es Nutch de Apache. Pero para la mayoría de los usuarios, Nutch es la peor opción entre este tipo de rastreadores. Las razones son las siguientes:

1) Nutch es un rastreador diseñado para motores de búsqueda. La mayoría de los usuarios necesitan un rastreador preciso. rastreo de datos (extracción fina). Dos tercios de los procesos que ejecuta Nutch están diseñados para motores de búsqueda. No tiene mucho sentido para la extracción de semen. En otras palabras, utilizar Nutch para la extracción de datos perderá mucho tiempo en cálculos innecesarios. Y si intenta desarrollar secundariamente Nutch para que sea adecuado para el negocio de extracción fina, básicamente destruirá el marco de Nutch y cambiará Nutch más allá del reconocimiento. Si tiene la capacidad de modificar Nutch, es realmente mejor reescribirlo usted mismo. marco de rastreo.

2) Nutch depende de hadoop para ejecutarse, y hadoop en sí consume mucho tiempo. Si la cantidad de máquinas del clúster es pequeña, la velocidad de rastreo no será tan rápida como la de un rastreador de una sola máquina.

3) Aunque Nutch tiene un mecanismo de complemento, se promociona como algo destacado. Puede ver algunos complementos de Nutch de código abierto que proporcionan funciones de extracción finas. Pero cualquiera que haya desarrollado complementos de Nutch sabe lo desagradable que es el sistema de complementos de Nutch. El uso del mecanismo de reflexión para cargar y llamar complementos hace que sea extremadamente difícil escribir y depurar programas, y mucho menos desarrollar un sistema de extracción complejo y refinado. Además, Nutch no proporciona los puntos de montaje enchufables correspondientes para una extracción fina. El complemento de Nutch tiene solo cinco o seis puntos de montaje, y estos cinco o seis puntos de montaje son para servicios de motores de búsqueda y no proporcionan puntos de montaje para una extracción fina. La mayoría de los complementos de extracción refinados de Nutch están montados en el punto de montaje del "analizador de páginas" (analizador). Este punto de montaje se utiliza en realidad para analizar enlaces (proporcionar URL para rastreo posterior) y proporcionar a algunos motores de búsqueda páginas web fáciles de extraer. información (metainformación de la página web, texto).

4) Utilice Nutch para el desarrollo secundario de rastreadores. El tiempo necesario para escribir y depurar rastreadores suele ser más de diez veces mayor que el de un rastreador de una sola máquina. El costo de aprendizaje para comprender el código fuente de Nutch es muy alto, y mucho menos pedir a todos los miembros de un equipo que comprendan el código fuente de Nutch. Durante el proceso de depuración, ocurrirán varios problemas además del programa en sí (problemas de hadoop, problemas de hbase).

5) Mucha gente dice que Nutch2 tiene gora, que puede conservar datos en archivos avro, hbase, mysql, etc. Mucha gente realmente lo entiende mal. Los datos persistentes mencionados aquí se refieren al almacenamiento de información de URL (datos necesarios para la administración de URL) en avro, hbase y mysql. No son los datos estructurados lo que desea extraer. De hecho, para la mayoría de las personas, no importa dónde se encuentre la información de la URL.

6) La versión de Nutch2 actualmente no es apta para desarrollo. La versión estable oficial de Nutch es nutch2.2.1, pero esta versión está vinculada a gora-0.3.

Si desea usar hbase con nutch (la mayoría de la gente usa nutch2 solo para usar hbase), solo puede usar hbase alrededor de la versión 0.90 y, en consecuencia, debe reducir la versión de hadoop a alrededor de hadoop 0.2. Además, los tutoriales oficiales de Nutch2 son bastante engañosos. Hay dos tutoriales para Nutch2, a saber, Nutch1.x y Nutch2.x. El sitio web oficial de Nutch2.x dice que puede admitir hbase 0.94. Pero, de hecho, Nutch2.x significa una versión anterior a Nutch2.3 y posterior a Nutch2.2.1. Esta versión se actualiza constantemente en el SVN oficial. Y es muy inestable (se modifica constantemente).

Así que, si no eres un motor de búsqueda, intenta no elegir Nutch como rastreador. A algunos equipos les gusta seguir la tendencia e insisten en elegir a Nutch para desarrollar rastreadores refinados. En realidad, esto se debe a la reputación de Nutch (el autor de Nutch es Doug Cutting, por supuesto, el resultado final a menudo retrasa la finalización del proyecto).

Si desea crear un motor de búsqueda, Nutch1.x es una muy buena opción. Nutch1.x combinado con solr o es puede formar un motor de búsqueda muy potente. Si debe utilizar Nutch2, se recomienda esperar hasta que se lance Nutch2.3. El Nutch2 actual es una versión muy inestable.

La segunda categoría: rastreadores independientes de JAVA

Los rastreadores de JAVA se dividen aquí en una categoría separada porque JAVA tiene un ecosistema muy completo en el área de rastreadores web. La información relevante es también la más completa. Puede que haya cierta controversia aquí, sólo estoy divagando.

De hecho, el desarrollo de rastreadores web (frameworks) de código abierto es muy simple, y personas anteriores han resuelto problemas difíciles y complejos (como el análisis y posicionamiento del árbol DOM, la detección de conjuntos de caracteres y la distribución masiva). Deduplicación de URL). Se puede decir que no hay contenido técnico. Incluyendo a Nutch, de hecho, la dificultad técnica de Nutch es desarrollar hadoop, y el código en sí es muy simple. En cierto sentido, un rastreador web es similar a recorrer los archivos en la máquina local para encontrar la información en los archivos. No hay ninguna dificultad. La razón por la que elegí el marco de rastreo de código abierto es para evitar problemas. Por ejemplo, cualquiera puede crear módulos como la administración de URL del rastreador y los grupos de subprocesos, pero llevará un período de depuración y modificación para hacerlos estables.

Para la función de rastreador. Las preguntas que más preocupan a los usuarios suelen ser:

1) ¿El rastreador admite subprocesos múltiples? ¿Puede el rastreador utilizar un proxy? ¿Puede el rastreador rastrear datos duplicados? ¿Puede el rastreador rastrear información generada por JS? ?

Si no admite subprocesos múltiples, no admite servidores proxy y no puede filtrar URL duplicadas, no se denomina rastreador de código abierto, pero se denomina ejecución cíclica de solicitudes http.

Si puede rastrear la información generada por js tiene poco que ver con el rastreador en sí. Los rastreadores son los principales responsables de recorrer sitios web y descargar páginas. La información generada al rastrear js está relacionada con el módulo de extracción de información de la página web, que a menudo debe completarse simulando un navegador (htmlunit, selenium). Estos navegadores simulados suelen tardar mucho tiempo en procesar una página. Entonces, una estrategia es utilizar estos rastreadores para recorrer el sitio web. Cuando encuentre una página que deba analizarse, envíe la información relevante de la página web al navegador simulado para completar la extracción de información generada por JS.

2) ¿Pueden los rastreadores rastrear información ajax?

Hay algunos datos cargados de forma asincrónica en la página web. Hay dos formas de rastrear estos datos: usar un navegador simulado (descrito en la pregunta 1) o analizar la solicitud http ajax y generar la solicitud ajax usted mismo. .url, obtenga los datos devueltos. Si genera la solicitud ajax usted mismo, ¿cuál es el punto de utilizar un rastreador de código abierto? De hecho, es necesario utilizar el grupo de subprocesos y las funciones de administración de URL de los rastreadores de código abierto (como el rastreo de puntos de interrupción).

Si ya puedo generar las solicitudes (lista) ajax que necesito, ¿cómo puedo usar estos rastreadores para rastrear estas solicitudes?

Los rastreadores suelen estar diseñados en modo de recorrido en amplitud o en modo de recorrido en profundidad para recorrer páginas estáticas o dinámicas. El rastreo de información ajax pertenece a la categoría de la web profunda, aunque la mayoría de los rastreadores no lo admiten directamente. Pero también se puede hacer de algunas maneras. Por ejemplo, WebCollector utiliza un recorrido de amplitud para recorrer el sitio web. La primera ronda de rastreo del rastreador es rastrear todas las URL en la colección de semillas (seeds). En pocas palabras, la solicitud ajax generada se utiliza como semilla y se coloca en el rastreador. Utilice un rastreador para realizar un recorrido de amplitud con una profundidad de 1 en estas semillas (el valor predeterminado es un recorrido de amplitud).

3) ¿Cómo rastrea el rastreador el sitio web en el que desea iniciar sesión?

Todos estos rastreadores de código abierto admiten la especificación de cookies durante el rastreo, y el inicio de sesión simulado se basa principalmente en cookies. En cuanto a cómo obtener cookies, no es cuestión de rastreadores. Puede obtenerlo manualmente, simular el inicio de sesión con una solicitud http o iniciar sesión automáticamente con un navegador simulado para obtener cookies.

4) ¿Cómo extrae el rastreador información de las páginas web?

Los rastreadores de código abierto generalmente integran herramientas de extracción de páginas web. Admite principalmente dos especificaciones: CSS SELECTOR y XPATH. En cuanto a cuál es mejor, no comentaré aquí.

5) ¿Cómo guarda el rastreador la información de la página web?

Algunos rastreadores vienen con un módulo responsable de la persistencia. Por ejemplo, webmagic tiene un módulo llamado canalización. Mediante una configuración simple, la información extraída por el rastreador se puede conservar en archivos, bases de datos, etc. También hay algunos rastreadores que no proporcionan directamente a los usuarios módulos de persistencia de datos. Como rastreador4j y webcollector. Permita que los usuarios agreguen la operación de envío a la base de datos en el módulo de procesamiento de páginas web. En cuanto a si es bueno usar un módulo como pipeline, es similar a si es bueno usar un ORM para operar una base de datos. Depende de su negocio.

6) ¿Qué debo hacer si el sitio web bloquea el rastreador?

Si el sitio web bloquea el rastreador, normalmente se puede solucionar utilizando varios agentes (agentes aleatorios). Sin embargo, estos rastreadores de código abierto generalmente no admiten directamente el cambio aleatorio de agentes. Por lo tanto, los usuarios a menudo necesitan colocar los agentes obtenidos en una matriz global y escribir un código para obtener los agentes aleatoriamente (de la matriz).

7) ¿Puede una página web llamar a un rastreador?

El rastreador se llama en el lado del servidor de la Web. Puede usarlo como lo usa habitualmente estos rastreadores.

8) ¿Cómo es la velocidad de la oruga?

La velocidad de un rastreador de código abierto independiente básicamente puede alcanzar el límite de la velocidad de la red local. La velocidad lenta del rastreador a menudo se debe a que el usuario ha abierto menos subprocesos, la velocidad de la red es lenta o la interacción con la base de datos es lenta cuando los datos persisten. Estas cosas a menudo están determinadas por la máquina del usuario y el código de desarrollo secundario. La velocidad de estos rastreadores de código abierto es muy buena.

9) Aunque el código está escrito correctamente, pero los datos no se pueden rastrear, ¿hay algún problema con el rastreador? ¿Se puede solucionar cambiando el rastreador?

Si el código está escrito correctamente pero los datos no se pueden rastrear, otros rastreadores tampoco podrán rastrearlos. En este caso, el sitio web lo ha bloqueado o los datos que rastreó fueron generados por JavaScript. La falla al rastrear los datos no se puede resolver cambiando el rastreador.

10) ¿Qué rastreador puede determinar si el sitio web ha sido rastreado y qué rastreador puede rastrearlo según el tema?

El rastreador no puede juzgar si el sitio web ha sido rastreado, solo puede cubrirlo tanto como sea posible.

En cuanto al rastreo basado en el tema, el rastreador solo sabe de qué tema se trata después de rastrear el contenido. Por eso suelo bajar completamente y luego filtrar el contenido. Si cree que el rastreo es demasiado amplio, puede limitar el alcance restringiendo la regularización de URL y otros métodos.

11) ¿Qué patrón de diseño y arquitectura de rastreador es mejor?

Los patrones de diseño son una mierda. Cuando se trata de buenos patrones de diseño de software, es porque el software ha sido desarrollado y luego se resumen varios patrones de diseño.

Los patrones de diseño no tienen ningún papel rector en el desarrollo de software. El uso de patrones de diseño para diseñar rastreadores solo hará que el diseño del rastreador esté más abultado.

En cuanto a la arquitectura, los rastreadores de código abierto actualmente se centran en el diseño de estructuras de datos detalladas, como el rastreo de grupos de subprocesos y colas de tareas, que todos pueden controlar. El negocio de los rastreadores es demasiado simple para hablar de cualquier estructura.

Entonces, para los rastreadores de código abierto JAVA, creo que puedes encontrar uno que sea fácil de usar. Si el negocio es complejo, cualquier rastreador que utilice requerirá un desarrollo secundario complejo para satisfacer las necesidades.

La tercera categoría: rastreadores independientes que no son JAVA

Hay muchos rastreadores excelentes entre los rastreadores escritos en lenguajes que no son JAVA. El propósito de extraerlos aquí como una categoría no es discutir la calidad del rastreador en sí, sino discutir el impacto de rastreadores como larbin y scrapy en los costos de desarrollo.

Hablemos primero del rastreador de Python. Python puede usar 30 líneas de código para completar la tarea de 50 líneas de código JAVA. Escribir código en Python es realmente rápido, pero en la etapa de depuración del código, la depuración del código Python a menudo lleva mucho más tiempo que el tiempo ahorrado en la etapa de codificación. Al desarrollar con Python, para garantizar la corrección y estabilidad del programa, es necesario escribir más módulos de prueba. Por supuesto, si la escala de rastreo no es grande y el negocio de rastreo no es complicado, también es bueno usar un rastreador como scrapy, que puede completar fácilmente la tarea de rastreo.

Para los rastreadores de C, el costo de aprendizaje será relativamente alto. Y no se puede calcular simplemente el costo de aprendizaje de una persona. Si el software requiere desarrollo o transferencia en equipo, será el costo de aprendizaje de muchas personas. Depurar software tampoco es tan fácil.

También hay algunos rastreadores Ruby y PHP, pero no hay muchos comentarios aquí. De hecho, existen algunas tareas de recopilación de datos muy pequeñas que son muy convenientes para usar Ruby o PHP. Pero al elegir rastreadores de código abierto en estos idiomas, por un lado, debe investigar el ecosistema relevante y, por otro lado, estos rastreadores de código abierto pueden tener algunos errores que no puede encontrar (hay pocas personas que los usan). y hay menos información)

Fin.