
Estoy echando un vistazo a ver que que hay disponible Open Source, para crawlear.
Este post es un miniapunte, de lo que seguramente sea un artículo mas largo...
El punto lógico de entrada para mirar... pues la
wikipedia.
He intentado encontrar algo mas allá... pero realmente no he encontrado nada interesante.
Sin hacer un análisis muy exhaustivo, os puedo decir que los tres principales candidatos a considerar serían (*1):
Los dos últimos son java, mientras que el primero creo es C.
nuch, está bien, porque es un producto con bastante apoyo, una documentación posiblemente por encima del resto (por ser de apache).
La alternativa sería hacer nosotros el crawler, pero esto sería una solución sólo a llevar a cabo si no nos queda mas remedio, ya que no es un tema trivial.
nutchEn principio no lo iba a considerar, por no haber entendido correctamente su arquitectura.
Pensaba que no tenía un crawler-store independiente de los indices. Pero no es así.
Si que lo tiene, y al igual que heritrix, en formato comprimido. Son lo que llaman segmentos.
Realemente lo que se almacena son objetos java, serializados y comprimidos.
httrackEl primero ya lo había usado para crawlear sites pequeñitos, pero aquí estamos hablando de usarlo para hacer crawleos potentes, de la web.
Todavía no lo he probado en serio en esta faceta, ya que sólo lo había usado en windows, y como he indicado para hacer crawleos de sites.
Pero el core del crawler es una librería con lo cual siempre vamos a poder acceder a ella desde python (esto siempre lo tengo en el punto de mira ;).
De hecho ya hay un módulo python disponible, httrack-py, que permite implementar ciertos callbacks en python.
Pero si lo que queremos es integrar completamente la librería en python, me temo que no vamos a tener nada disponible... Eso si, siempre podemos hacer nuestros propios bindings; para ello disponemos del código fuente...
El producto la verdad, está bastante documentado.
Ya para acabar indicar que lo que nos interesa realmente, no es la estructura de mirroring que genera el comando (al estilo de wget, vamos...) sino los datos cacheados.
Estos datos estan en unos tar.gz, a los cuales tendremos que acceder a través de una librería ya que directamente casi seguro nos van a dar problemas en la descompresión...
Total... que para poderlo usar algún desarrollo vamos a tener que hacer...
heritrixEl que esté detras de este crawler archive.org, ya es una garantía de que el producto va a estar bien.
La documentación es un poco pobre, pero para lanzar una prueba básica te apañas.
Indicar que tuve problemas para lanzarlo en windows, pero en linux ninguno.
El interfaz para la configuración es web (el crawler corre un servidor web de configuración), y soporta la gestión de crawlers distribuidos.
A la hora de definir el 'job' de crawleo, tenemos muchas opciones a configurar. Es aquí donde la documentación es mas pobre. Seguramente tengamos que recurrir al API java y a la documentación para desarrolladores para ampliar el tema. La de usuario no lo cubre.
Como resultado del crawleo se guardan los documentos en unos archivos
ARC, comprimidos. De todo el proceso se van generando datos. Que podemos consultar tando desde el GUI, como desde diferentes
archivos.
Con la instalación, se incluye el comando
arcreader, que nos permite acceder a los contenidos de los archivos arc.
En la web, se indica que hay
readers/writers en python para los archivos ARC, dentro de la herramienta
hedaernConclusiónNo tengo nada claro que producto usar. Es una conclusión inconclusa...
En principio descartgaría httrack, ya que su función es mas limitada. Está mas bien diseñado para crawlear sites, en lugar de la web. Pero es un producto que fácilmente podemos integrar con python.
Con respecto a los otros dos... dificil cuestión. Heritrix, me ha parecido realmente potente.
Tanto por la forma de trabajar como por todos los datos que te ofrece.
En este aspecto me ha llamado mas la atención que nutch. También es posible nutch te muestra esa información, pero de momento no haya accedido a ella, ya que sólo lo he lanzado modo comando.
Quizás el mayor problema de heritrix, es que está orientado a conseguir una imagen de la web en un momento dado. Si recrawleamos, un mismo documento, no va a sustituir a la versión anterior.
Estaría duplicado (*2).
Heritrix tiene una ventaja con respecto a nutch, y es que el formato del crawler-store es tal que podriamos acceder desde cualquier lenguaje. Por el contrario al crawler-store de nutch sólo podemos acceder desde java, ya que lo que se almacenan son objetos java serializados y comprimidos.
Con ambos productos, podemos extraer documentos vía comando.
(*1) Son los que me han parecido mas usables
(*2) al menos con el comportamiento por defecto; y creo que sin defecto, ya que los archivos ARC llevan implicito un timestamp. Para poder decidir si un documento está en un crawler-store o no habría que recorrelos enteros...