Red de conocimiento informático - Conocimiento sistemático - Crawler, ¿qué marco es más rápido que httpclient?

Crawler, ¿qué marco es más rápido que httpclient?

¿Debería elegir Nutch, Crawler4j, WebMagic, scrapy, WebCollector u otros para desarrollar un rastreador web? Solo digo tonterías según mi experiencia: los rastreadores mencionados anteriormente se pueden dividir básicamente en tres categorías: 1. Rastreador distribuido: Nutch.

2. Rastreador único JAVA: Crawler4j, WebMagic, WebCollector.

3. Rastreadores independientes que no son JAVA: scrapy

La primera categoría: reptiles distribuidos

Los rastreadores utilizan rastreadores distribuidos para resolver principalmente dos problemas:

p>

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

1) Nutch es un rastreador diseñado para motores de búsqueda y la mayoría de los usuarios necesitan un rastreador para rastrear (extraer) datos precisos. Nutch ejecuta un conjunto de procesos, dos tercios de los cuales están diseñados para motores de búsqueda. No tiene mucho sentido para una extracción fina. En otras palabras, utilizar Nutch para extraer datos perderá mucho tiempo en cálculos innecesarios. Y 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, cambiará a Nutch más allá del reconocimiento y tendrá la capacidad de modificar Nutch. Realmente es mejor reescribir usted mismo un marco de rastreo distribuido.

2) Nutch se ejecuta en hadoop, lo que a su vez 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 solo rastreador.

3) Nutch tiene un mecanismo de complemento, que se promociona como un punto 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 sistemas de extracción complejos y sofisticados sobre ellos. Además, Nutch no proporciona un punto de montaje enchufable correspondiente 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 refinados de Nutch están montados en el punto de montaje del analizador de páginas. En realidad, se utilizan para analizar enlaces (proporcionar URL para el rastreo posterior) y proporcionar a los motores de búsqueda información de páginas web fácilmente extraída (metainformación de páginas web y). texto textual).

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

5) Mucha gente dice que Nutch2 tiene gora, que puede conservar datos en archivos avro, hbase, mysql, etc. De hecho, mucha gente lo entendió 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. Estos no son los datos estructurados que desea extraer. De hecho, para la mayoría de las personas, no importa dónde se almacene la información de la URL.

La versión Nutch 2 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 hbase alrededor de la versión 0.90, y la versión de hadoop debe reducirse a aproximadamente 0.2 en consecuencia. Y el tutorial oficial de nutch2 es engañoso.

Nutch2 tiene dos tutoriales, Nutch1.x y Nutch2.x. Nutch2.x está escrito en el sitio web oficial de nutch 2.x y es compatible con hbase 0.94. Pero, de hecho, Nutch2.x se refiere a la versión anterior a Nutch2.3 y posterior a Nutch2.2.1, que los funcionarios de SVN actualizan continuamente. Y es muy inestable (se modifica constantemente).

Por lo tanto, si no planeas ser un motor de búsqueda, intenta no elegir Nutch como rastreador. A algunos equipos les gusta seguir la tendencia y tienen que elegir a Nutch para desarrollar los rastreadores Jingti. De hecho, está dirigido a la reputación de Nutch (Nutch fue escrito por Doug Kading. Por supuesto, el resultado final suele ser un retraso en el proyecto).

Si quieres ser un buscador, Nutch1.x es una muy buena opción. Nutch1.x y solr o es pueden formar un motor de búsqueda muy potente. Si debe utilizar Nutch2, se recomienda esperar hasta que se lance Nutch2.3. Nutch2 es actualmente una versión muy inestable.

La segunda categoría: rastreadores independientes de JAVA

La razón por la que los rastreadores de JAVA se clasifican aquí en una categoría separada es porque JAVA ha sido 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 de rastreadores web (frameworks) de código abierto es muy simple. Los 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 la deduplicación masiva 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 de esta máquina en busca de información en los archivos. 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 el grupo de subprocesos, pero se necesitará un período de depuración y modificación para estabilizarse.

Para funciones reptilianas. Los usuarios generalmente se preocupan por:

1) ¿El rastreador admite subprocesos múltiples? ¿Puede el rastreador rastrear datos duplicados?

Las cosas que no admiten subprocesos múltiples, proxies y filtrado de URL duplicadas no se denominan rastreadores de código abierto, sino que se denominan ejecución de bucle de solicitud http.

Si puede rastrear 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 por el rastreo js está relacionada con el módulo de extracción de información de la página web, que a menudo debe completarse simulando el navegador (htmlunit, selenium). Estos navegadores simulados suelen tardar mucho en procesar una página. Por lo tanto, una estrategia es utilizar estos rastreadores para recorrer el sitio web. Cuando es necesario analizar una página, la información relevante de la página web se envía al navegador simulado para completar la extracción de la 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 capturar estos datos: utilizar un navegador simulado (descrito en la pregunta 1) o analizar la solicitud http ajax, generar la URL de solicitud ajax y obtener los datos devueltos. Si genera una solicitud ajax usted mismo, entonces el significado de utilizar un rastreador de código abierto es en realidad utilizar el grupo de subprocesos y las funciones de administración de URL del rastreador de código abierto (como el rastreo de puntos de interrupción).

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

Los rastreadores generalmente están diseñados para recorrer páginas estáticas o dinámicas en modo transversal en amplitud o profundidad. La captura de información ajax pertenece a la categoría de la web profunda, aunque la mayoría de los rastreadores no la 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 consiste en rastrear todas las URL en la semilla. En pocas palabras, la solicitud ajax generada se coloca en el rastreador como una semilla. Utilice un rastreador para atravesar estas semillas con una profundidad de 1 (el valor predeterminado es el recorrido en amplitud).

3) ¿Cómo accede el rastreador al sitio web para acceder?

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 conseguir las galletas, ese no es asunto del reptil. Puede obtener cookies manualmente, simular el inicio de sesión mediante solicitudes http o utilizar un navegador simulado para iniciar sesión automáticamente.

4) ¿Cómo extrae un 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: selectores CSS 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 reptiles tienen 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 un módulo de persistencia de datos. Como crawler4j 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 el módulo de canalización es bueno o no, similar al problema del uso de ORM para operaciones de bases de datos, depende de su negocio.

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

Los sitios web bloquean los rastreadores, lo que generalmente se puede solucionar mediante múltiples proxies (proxies 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 donde los agentes se obtienen 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 y se puede utilizar como de costumbre. Estos rastreadores se pueden utilizar.

8) ¿Cuál es la velocidad de los reptiles?

Básicamente, se puede decir que la velocidad de un rastreador de código abierto independiente es el límite de la velocidad de su red. La baja velocidad del rastreador a menudo se debe al hecho de que el usuario tiene pocos subprocesos abiertos, la velocidad de la red es lenta o la interacción con la base de datos es lenta cuando los datos son persistentes. 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) Es obvio que el código está escrito correctamente y los datos no se pueden rastrear. ¿Hay algún problema con los rastreadores? ¿Puede otro rastreador solucionarlo?

Si el código está escrito correctamente, los datos no se pueden rastrear, ni tampoco otros rastreadores. En este caso, el sitio web lo bloqueó o los datos que rastreó fueron generados por javascript. No puedes extraer datos. No se puede solucionar cambiando el rastreador.

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

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

En cuanto al rastreo por tema, el rastreador no sabe cuál es el tema hasta que rastrea el contenido. Por lo general, se baja todo y luego se filtra el contenido. Si el alcance de escalada es demasiado amplio, puede reducirlo limitando la regularidad de la URL.

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

Los patrones de diseño son pura mierda. Decir que los patrones de diseño de software son buenos es resumir varios patrones de diseño después del desarrollo de software. 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 diseñan principalmente estructuras de datos detalladas, como grupos de subprocesos de rastreo, colas de tareas, etc., que todos pueden controlar bien. El negocio de los rastreadores es demasiado simple para hablar de un marco.

Entonces, para los rastreadores de código abierto JAVA, creo que busque uno que sea fácil de usar. Si el negocio es más complejo, qué rastreador elegir 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. Como categoría separada aquí, no está dirigida a la calidad del rastreador en sí, sino al 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 muy rápido, pero en la etapa de depuración, el tiempo dedicado a depurar el código Python a menudo excede con creces 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 bastante bueno usar 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 simplemente calcular el costo del aprendizaje para una sola persona. Si el software requiere desarrollo o entrega en equipo, será un costo de aprendizaje para muchas personas. La depuración de software no es tan fácil.

También hay algunos rastreadores de Ruby y PHP, por lo que no comentaré mucho aquí. De hecho, existen algunas tareas de recopilación de datos muy pequeñas, que son muy convenientes para usar Ruby o PHP. Sin embargo, al elegir rastreadores de código abierto en estos idiomas, por un lado, debe examinar el ecosistema relevante. Por otro lado, estos rastreadores de código abierto pueden producir algunos errores que no puede encontrar (menos personas y menos datos)

Fin.