- Tenga actualizaciones recientes en su software (2013).
- El lenguaje en el cual fue realizado, se pueda usar en los diferentes sistemas operativos. Con una instalación poco complicada.
- La licencia del Software es importante, sin embargo una condición es que sea opensource, ya que permitiría un estudio amplio de sus características y comportamiento.
-La documentación es MUY importante.
Abot, está hecho en c#, creo que por esta razón lo descarté.
Aspseek, está hecho en c++, funciona en sistemas POSIX, sin embargo es demasiado viejo, su última modificación fue en el año 2002, por lo que podemos decir que es un software poco usado hoy en día, sin embargo existen paquetes (rpm y .deb)para instalar esta antigüedad.
DataparkSearch: está escrito en C, existen paquetes para su instalación y su última actualización fue en el año 2010. Por lo que descartamos su utilización.
Wget: Es un crawler por línea de comando, que tiene una amplia gama de opciones para personalizar la descarga, obtiene el contenido de una página web, sin realizar el parseo, extracción, tokenización, del sitio web descargado, A diferencia de Nutch que realiza el proceso de parseo del formato HTML, y procesamiento de la data.
Curl (
http://curl.haxx.se/ ), principalmente utilizado para la transmisión de archivos también se utiliza aunque a menor escala para crawlear. Soporta entre otros protocolos
FTP,
FTPS,
HTTP,
HTTPS,
TFTP,
SCP,
SFTP,
Telnet, DICT, FILE y LDAP. Esta escrito en C++ y es multiplataforma ( *nix, Microsoft Windows, etc).
Grub: Ja, no el gestor de arranque de sistemas operativos.. es grub el crawler. Es un crawler distribuido, suena bien, y lo utiliza wikia, ya que fue comprado por Wikipedia en el 2007. Está escrito en c++ a pesar que durante un tiempo fue un proyecto de código cerrado, luego de la compra por wikipedia es un proyecto Opensource. El detalle por el cual es descartado es que tiene muy poca documentación. Sin embargo es un proyecto interesante y tiene un archivo TODO con cosas que se pueden realizar para contribuir con el proyecto, su última actualización fue el 03 de abril de este año (2013).
Heritrix: Es un crawler cuya última actualización fue realizada en el año 2006, está escrito en Java. Posee una interfaz web, para realizar funciones de cualquier crawler.
Ht-//Dig: Es un crawler cuya última actualización fue en el año 2004, un software bastante viejo, y además con muy poca documentación.
HTTTrack: Crawler escrito en C, algo muy al estilo wget (software ejecutado por línea de comando) sólo que con algo más dulzura, permite expresiones regulares, maneja los enlaces con rutas relativas y enlaces originales, una de sus ventajas es su versatilidad de opciones para obtener resultados diferentes. algo interesante es que puede establecer prioridades por el tipo de archivo que descarga y tasa mínima y máxima de transferencia para no abarcar todo el ancho de banda.
Sin embargo es un software no muy amigable que requiere un nivel mayor de conocimiento sobre como procesar los datos que obtiene este programa, ya que no realiza el parseo de los archivos obtenidos, y requiere de conocer un lenguaje de programación (perl, python) para procesar estos datos.
ICDL Crawler: es un crawler distribuido, que parsea el contenido a un formato de Web semantica (archivos WPT) interesante el uso de ontologías para este formato, es una herramienta algo avanzada para el objetivo de este trabajo práctico. Pueden obtener más información de: http://www.omfica.org que utiliza este tipo de crawler de acuerdo a las especificaciones del sitio.
mnoGoSearch: software que se utiliza como motor de búsqueda, es privativo por lo que quedó descartado para la realización de este proyecto, además de no tener actualizaciones desde el año 2012.
PHP-Crawler:Es una herramienta web que usa una base de datos para guardar datos de un sitio web y permite hacer búsquedas en el sitio. No se utiliza por línea de comandos sino por el navegador, sin embargo no tomamos en cuenta este proyecto ya que no se actualiza desde el 2006.
tkWWW Robot: proyecto muy muy viejo desde el año 1992, y su última actualización en 1996.
Seeks y Yacy: su objetivo primordial es ser un motor de búsqueda alternativo y tienen su propio crawler, en vista que se enfoca más hacia un motor de búsqueda, no lo tomaré en cuenta para el proyecto.
Scrapy: se requiere conocer el lenguaje de programación python y tener un poco de conocimiento de programación orientada a objetos. Creo que cualquier persona con poco conocimiento puede obtener la data que requiere, a diferencia de un crawler que obtiene toda la data, acá podemos obtener la data que necesitamos y no más de ahí.. está más orientado al web scraping.
Nutch: Es un crawler por sí sólo no es posible utilizarlo, se requiere de solr para obtener la data indexada, importante a destacar es su estructura, aún se encuentran dos versiones estables:
La versión 1.6 que permite utilizar el crawler y solr, sin necesidad de instalar otras aplicaciones para su manejo como hadoop, hbase, agora, hive, entre otros. La versión 2.x se orienta a procesos de mayor escala, y permite implementar "crawlers" distribuidos, y el procesado del texto a través de map reduce.
En la versión 1.6 se puede usar solr "out the box" es decir luego de descomprimir los archivos, nutch es un crawler enfocado más a escribir que a ser un motor de búsqueda, muchas de las características son plugins que pueden ser personalizados en el archivo de propiedades del nutch. Entre las características personalizadas se encuentra:
- seleccionar que sólo descargue las páginas perteneciente a los dominios de las semillas mencionadas en el directorio url.
- Seleccionar que parsee el archivo durante el fetch del mismo. Pero consume mucha memoria, y genera muchos procesos de lectura y escritura.
http://pastebin.com/YSXySCW1
db.ignore.external.links a "true" para que no busque enlaces externos dentro de los dominios semillas.
- El proceso de crawler de nutch consta de varias etapas:
inject->generate->fetch->parse->updatedb
- Añadimos una expresión regular de forma que sólo haga fetch de los sitios que pertenezcan a esos dominios definidos en el archivo regex-urlfilter.txt algo importante a comentar es que la utilización masiva de expresiones regulares realentiza el proceso del crawler. En nuestro caso son pocas urls, de igual forma en el archivo de configuración seteamos la propiedad:
Crawling e indexing.
./bin/nutch solrindex http://localhost:8983/solr crawl -linkdb crawl/linkdb crawl/segments/*
Comandos Nutch para visualizar que descargamos:
Estadísticas de lo descargado:
./bin/nutch readdb crawl/crawldb -dump pageurl
./bin/nutch readdb crawl/crawldb -stats
./bin/nutch readdb crawl/crawldb -url https://wwws.whitehouse.gov/petitions
También:
bin/nutch readseg -list crawl/segments/20130725200658
bin/nutch readseg -dump crawl/segments/20130725200658 dumpdir
Contenido de un segmento descargado.
s=`ls -d crawl/segments/* | head -1`
./bin/nutch readseg -dump crawl/segments/20130509191222 outputsegment
Para obtener Todo lo descargado en un solo archivo:
./bin/nutch readseg -list ./crawl/segments/ outputAllSegments
Para más detalle de como es el proceso:
http://florianhartl.com/nutch-how-it-works.html
este enlace está muy bien explicado.
Y sobre scoring utilizado por defecto con el plugin de nutch:
si tienes duda de porque eligió esas páginas para el topN que seleccionaste:
http://www2003.org/cdrom/papers/refereed/p007/p7-abiteboul.html
En resumen: nutch > curl > wget
(sí y solo si no sabes programar
y buscas obtener el contenido rápido)
sino libcurl > wget > nutch
Borrar todos los índices en solr:
Listar Urls inyectadas.
bin/nutch readdb crawl/crawldb -stats
bin/nutch readdb crawl/crawldb -dump dump
sí leiste todo esto tal véz te interese: como usar un scrapper con python:
Scrappy a scrapper.