Red de conocimientos turísticos - Información de alquiler - ¿Qué rastreador multiproceso de código abierto es más fácil de aprender?

¿Qué rastreador multiproceso de código abierto es más fácil de aprender?

¿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 3 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

El uso de rastreadores distribuidos es principalmente para resolver dos problemas:

1) Gestión masiva de URL

2) Velocidad de la red

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 por las siguientes razones:

1) Nutch es la mejor opción. p>

1) Nutch es un rastreador diseñado específicamente para motores de búsqueda. Lo que la mayoría de los usuarios necesitan es un rastreador que pueda realizar un rastreo de datos preciso (extracción fina). No tiene mucho sentido para una extracción fina. Dicho esto, utilizar Nutch para la extracción de datos desperdicia mucho tiempo en cálculos innecesarios. Además, si intenta hacer que Nutch sea adecuado para el negocio de extracción fina a través del desarrollo secundario, básicamente destruirá el marco de Nutch y cambiará Nutch más allá del reconocimiento. Si tiene la capacidad de modificar Nutch, es mejor reescribir un marco de rastreo distribuido.

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 independiente.

3) Aunque Nutch tiene un mecanismo de complemento, se utiliza como elemento promocional destacado. Puede ver algunos complementos de Nutch de código abierto que brindan capacidades de extracción sofisticadas. 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 sistemas de extracción complejos y detallados. Nutch no proporciona los puntos de montaje enchufables correspondientes para una extracción fina. El complemento Nutch solo tiene cinco o seis puntos de montaje, y estos cinco o seis puntos de montaje sirven a los motores de búsqueda y no proporcionan puntos de montaje para una extracción fina. La mayoría de los complementos de extracción detallados 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 cierta facilidad de uso para los motores de búsqueda. Información extraída de la página web (metainformación de la página web, texto de texto).

4) El uso de Nutch para el desarrollo secundario de rastreadores a menudo requiere más de diez veces el tiempo requerido para escribir y depurar rastreadores que para rastreadores independientes. El costo de aprendizaje para comprender el código fuente de Nutch es muy alto, sin mencionar la necesidad de que un equipo lea y comprenda el código fuente de Nutch. Durante el proceso de depuración, encontrará 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 entiende mal que los datos persistentes mencionados aquí se refieren a la información de URL almacenada en avro, hbase y mysql (datos necesarios para la administración de URL), no a los datos estructurados que desea extraer. 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 viene incluida con gora-0.3.

Si desea usar hbase con nutch (la mayoría de la gente usa nutch2 solo para usar hbase), solo puede usar la versión de hbase alrededor de 0.90 y, en consecuencia, debe reducir la versión de hadoop a alrededor de 0.2. El tutorial oficial de nutch2 es más detallado. Es más probable que se malinterpreten los tutoriales oficiales de nutch2. Hay dos tutoriales para Nutch2, a saber, Nutch1.x y Nutch2.x. El sitio web oficial de Nutch2.x está escrito para admitir hbase 0.94. Pero, de hecho, este Nutch2.x se refiere a una versión anterior a Nutch2.3 y posterior a Nutch2.2.1. Esta versión se actualiza continuamente en el SVN oficial. Y es muy inestable (modificado todo el tiempo).

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

Si quieres ser un motor de búsqueda, Nutch1.x es una muy buena opción. Nutch1.x se puede combinar con solr o es para 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: rastreador independiente de JAVA

El rastreador de JAVA se divide aquí en una categoría separada porque JAVA es muy completo en el ecosistema de rastreadores web. La información relevante es también la más completa. Puede que haya cierta controversia aquí, sólo estoy diciendo tonterías.

De hecho, el desarrollo (marco) de los rastreadores web de código abierto es muy simple, y sus predecesores han resuelto problemas difíciles y complejos (como el análisis y posicionamiento del árbol DOM, la detección de juegos de caracteres y las URL masivas). deduplicación). Se puede decir que no tiene nada de malo. Incluyendo a Nutch, la dificultad técnica de Nutch en realidad radica en el desarrollo de hadoop, y el código en sí es muy simple. Los rastreadores web son similares en cierto sentido a recorrer archivos locales para encontrar 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 ahorrar tiempo. Por ejemplo, cualquiera puede crear módulos como la administración de URL del rastreador y el grupo de subprocesos, pero se necesitará 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? ?

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

La información generada por js se puede capturar, pero el rastreador en sí no tiene ningún efecto. Los rastreadores son los principales responsables de recorrer un sitio web y descargar páginas. La captura de información generada por js está relacionada con el módulo de extracción de información de la página web, que generalmente debe completarse simulando un navegador (htmlunit, selenium). Estos navegadores simulados suelen tardar mucho tiempo en procesar la página. Por lo tanto, una estrategia es utilizar estos rastreadores para recorrer el sitio web y, cuando encuentre una página que deba analizarse, enviar la información relevante de la página al navegador simulado para completar la extracción de información generada por JS.

2) ¿Puede el rastreador rastrear información ajax?

Hay algunos datos cargados de forma asincrónica en la página web. Hay dos formas de capturar estos datos: usar un navegador simulado (descrito en la pregunta 1) o analizar la solicitud http ajax y generar la URL de la página web. Solicite ajax usted mismo y obtenga los datos devueltos. ¿Cuál es el punto de utilizar un rastreador de código abierto si usted mismo genera las solicitudes ajax? De hecho, esto es para 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 ajax requeridas (lista), ¿cómo puedo usar estos rastreadores para rastrear estas solicitudes?

Los rastreadores suelen estar diseñados para recorrer páginas estáticas o dinámicas en modos de recorrido amplio o profundo. El rastreo de información ajax pertenece a la web profunda, aunque la mayoría de los rastreadores no lo admiten directamente. Pero también se puede lograr mediante algunos métodos. 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 el rastreador para realizar un recorrido de ancho de 1 profundidad en estas semillas (el valor predeterminado es un recorrido de ancho).

3) ¿Cómo rastrea el rastreador el sitio web que desea visitar?

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 un problema del rastreador. Puede obtenerlo manualmente, simular un inicio de sesión a través de una solicitud http o utilizar un navegador simulado para iniciar sesión automáticamente y obtener la cookie.

4) ¿Cómo extrae un rastreador información de una página web?

Los rastreadores de código abierto generalmente integran herramientas de extracción de páginas web. Admite principalmente dos especificaciones: en cuanto a cuál es mejor, no hay evaluación aquí.

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

Algunos rastreadores vienen con módulos responsables de la persistencia. Por ejemplo, webmagic tiene un módulo llamado canalización, que se puede configurar para conservar la información extraída por el rastreador en archivos, bases de datos, etc. También hay algunos rastreadores que no tienen un módulo llamado canalización. También hay algunos rastreadores que no proporcionan directamente a los usuarios módulos de persistencia de datos. Por ejemplo, rastreador4j y webcollector. Permita que el usuario agregue la operación de enviar la base de datos en el módulo de procesamiento de la página web. En cuanto a si es bueno utilizar módulos como canalizaciones y si es bueno utilizar ORM para operar la base de datos, depende de su negocio.

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

El sitio web bloquea el rastreador, lo que generalmente se puede solucionar mediante el uso de múltiples servidores proxy (proxies aleatorios). Pero estos rastreadores de código abierto generalmente no admiten directamente el cambio aleatorio de agentes. Por lo tanto, los usuarios generalmente necesitan obtener el proxy ellos mismos, colocarlo en una matriz global y luego escribir su propio código para obtener el proxy aleatoriamente (de la matriz).

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

Los rastreadores se llaman desde el lado del servidor web y usted puede utilizarlos como lo hace habitualmente.

8) ¿Qué tan rápido es el rastreador?

Básicamente, se puede decir que la velocidad de un rastreador de código abierto independiente es el límite de la velocidad de la red de la máquina. La baja velocidad del rastreador a menudo se debe al hecho de que la cantidad de subprocesos abiertos por el usuario es pequeña, la velocidad de la red es lenta o la interacción con la base de datos es lenta cuando los datos persisten. Estos suelen estar determinados por el desarrollo secundario de la máquina y el código del usuario. La velocidad de estos rastreadores de código abierto está bien.

9) Aunque el código está escrito correctamente, pero los datos no se pueden capturar, ¿hay algún problema con el rastreador que pueda resolverse cambiando a otro rastreador?

Si el código está escrito correctamente, los datos no se capturarán y otros rastreadores tampoco podrán capturarlos. En este caso, el sitio web lo bloqueó o los datos que extrajo fueron generados por javascript. Reemplazar los rastreadores para extraer datos no es la solución.

10) ¿Qué tipo de rastreador puede determinar si el sitio web ha sido rastreado? ¿Puede el rastreador rastrear 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 rastreará hacia abajo después de rastrear el contenido para comprender cuál es el tema. Por lo tanto, generalmente es necesario filtrar el contenido después de rastrearlo en su totalidad. Si el contenido rastreado es demasiado general, puede limitar el alcance restringiendo la regularización de URL y otros métodos.

11) ¿Qué rastreador tiene mejores patrones de diseño y arquitectura?

Los patrones de diseño son una mierda.

Cualquiera que diga buenos patrones de diseño de software está resumiendo algunos patrones de diseño después de completar el desarrollo del software. Los patrones de diseño no tienen un papel rector en el desarrollo de software. El uso de patrones de diseño para diseñar su rastreador solo hará que el diseño de su rastreador sea más abultado.

En cuanto a la arquitectura, los rastreadores de código abierto actualmente se centran en el diseño detallado de estructuras de datos, como grupos de subprocesos de rastreadores 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 siempre que encuentre uno que pueda usarse sin problemas. Si el negocio es complejo, cualquier rastreador, por ejemplo, tendrá que pasar por 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. Se extrae aquí como una categoría separada. No analiza la calidad del rastreador en sí, pero analiza el impacto de rastreadores como larbin y scrapy en los costos de desarrollo.

El primero es el rastreador de Python. Python puede usar 30 líneas de código para completar la tarea que JAVA puede completar con 50 líneas de código. Escribir código en Python es realmente muy rápido, pero en la etapa de depuración del código, la depuración del código Python a menudo ahorra mucho tiempo que 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 el volumen de rastreo no es grande y el negocio de rastreo no es complicado, también es bastante bueno usar un rastreador como scray, 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 contar 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 fácil.

También hay algunos rastreadores Ruby y PHP, pero no hay muchas evaluaciones aquí. De hecho, existen algunas tareas de recopilación de datos muy pequeñas para las que Ruby o PHP son convenientes. Pero al elegir rastreadores de código abierto en estos idiomas, por un lado, es necesario estudiar el ecosistema relevante. Además, estos rastreadores de código abierto pueden tener algunos errores que no se pueden buscar (menos personas los usan y menos información). )