2010-11-25 29 views
17

Estoy tratando de hacer una aplicación web crawler/araña muy simple en C++. Me han buscado en google por uno simple para entender el concepto. Y me encontré con esto:¿Un rastreador/araña de web C++ muy simple?

http://www.example-code.com/vcpp/spider.asp

embargo, su un poco poco complicado/difícil de digerir para mí.

Lo que estoy tratando de hacer es, por ejemplo:

introducir la URL: www.example.com (voy a utilizar bash-> wget, para obtener el contenido/código fuente)

luego, buscará, tal vez un enlace "a href", y luego almacenará en algún archivo de datos.

¿Algún tutorial simple o directrices para mí?

yo sólo estoy empezando el aprendizaje de C++ (1 mes)

+3

Primero aprenda C++ correctamente, luego intente hacer algo tan complicado como un rastreador. –

+3

Hmm ... ¿Incluso un simple rastreador? No es tan complicado como Larbin. Creo que, mientras hago crawler, me ayudará a aprender muchas cosas en C++. Adivina, mi pensamiento es incorrecto – popurity09

+0

considera usar https://github.com/Microsoft/cpprestsdk – Sergei

Respuesta

40

Está bien, voy a tratar de apuntar en la dirección correcta. Conceptualmente, un webcrawler es bastante simple. Gira en torno a una estructura de datos de cola FIFO que almacena URL pendientes. C++ tiene una estructura de cola incorporada en la biblioteca estándar, std::queue, que puede usar para almacenar las URL como cadenas.

El algoritmo básico es bastante sencillo:

  1. Comience con una URL base que se seleccionar y colocarlo en la parte superior de la cola
  2. Pop el URL en la parte superior de la cola y descargarlo
  3. analizar el archivo HTML descargado y extraer todos los enlaces
  4. Insertar cada enlace se extrae en la cola
  5. Goto paso 2, o detener una vez que llegue algún límite especificado

Ahora, me dijeron que un webcrawler es conceptualmente simple, pero su aplicación no es tan simple. Como puede ver en el algoritmo anterior, necesitará: una biblioteca de redes HTTP que le permita descargar URL, y, un buen analizador de HTML que le permitirá extraer enlaces. Usted mencionó que podría usar wget para descargar páginas. Eso simplifica un poco las cosas, pero aún necesita analizar los documentos HTML descargados. El análisis correcto de HTML es una tarea no trivial. Una simple búsqueda de cadenas para <a href= solo funcionará a veces. Sin embargo, si esto es solo un programa de juguete que está utilizando para familiarizarse con C++, una simple búsqueda de cadenas puede ser suficiente para sus propósitos. De lo contrario, debe usar una biblioteca de análisis HTML seria.

También hay otras consideraciones que debe tener en cuenta al escribir un webcrawler, como cortesía. La gente se enojará y posiblemente bloqueará su IP si intenta descargar demasiadas páginas, demasiado rápido, del mismo host. Por lo tanto, es posible que deba implementar algún tipo de política en la que su webcrawler espere un breve período de tiempo antes de descargar cada sitio. También necesita algún mecanismo para evitar volver a descargar la misma URL, obedecer el robots exclusion protocol, evitar las trampas de rastreo, etc ... Todos estos detalles se suman para hacer que la implementación real de un webcrawler robusto no sea tan simple.

Dicho esto, estoy de acuerdo con larsmans en los comentarios. Un webcrawler no es la mejor manera de aprender C++. Además, C++ no es el mejor lenguaje para escribir un webcrawler. El acceso de bajo nivel y bajo rendimiento que obtienes en C++ es inútil cuando escribes un programa como un webcrawler, que pasa la mayor parte del tiempo esperando que las URL se resuelvan y descargar. Un lenguaje de scripting de alto nivel como Python o algo se adapta mejor a esta tarea, en mi opinión.

+0

Siempre pensé que C/C++ son los mejores lenguajes de programación. Estoy equivocado todo el tiempo, qué vergüenza. Gracias por brindarme una respuesta tan útil. Dejaré caer la idea, y trataré de desarrollar algo más. Por cualquier cambio, ¿tiene alguna idea de qué lenguaje de programación usó Google? – popurity09

+10

@ popurity09, bueno C++ es uno de mis idiomas favoritos, pero no creo que exista el "mejor" lenguaje de programación. Por el contrario, ciertos lenguajes son más adecuados para ciertas tareas que otros. En cuanto a Google, todo lo que sé es que una versión temprana de su webcrawler fue escrita en Python. –

+1

encontré este enlace útil para obtener los conceptos de construcción de araña web http://code.google.com/p/driller-cpp-web-crawler/ – user63898

4

Compruebe este rastreador web e indexador escrito en C++ en: Mitza web crawler El código se puede utilizar como referencia. Está limpio y proporciona un buen comienzo para una codificación webcrawler . Los diagramas de secuencia se pueden encontrar en las páginas de enlaces anteriores.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/faq#reputation) podrá para [comentar cualquier publicación] (http://stackoverflow.com/privileges/comment). – Bohemian

+1

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Kirk

+2

¡Y * sí * cambió! : / – blumonkey

Cuestiones relacionadas