Desenmascara.me

How to verify whether a website is legitimate or not?: desenmascara.me

lunes, 25 de enero de 2010

Crawling sencillo con anemone (ruby)

Anemone es una librería en ruby para extraer enlaces de sitios web (aka crawler), y poder realizar diversas acciones en ellos tan sólo indicando la URL principal.  La descubrí a través del scanner whatweb.



Simplicidad y potencia, ejemplos.
Frontend de línea de comandos:

ecasbas@laptop:/var/lib/gems/1.8/bin$ ./anemone
Anemone is a web spider framework that can collect
useful information about pages it visits.

Usage:
  anemone [arguments]

Commands:
  count, cron, pagedepth, serialize, url-list



Ejemplo:
ecasbas@laptop:/#./anemone url-list http://www.wordpress.org
http://www.wordpress.org/
http://wordpress.org/
http://www.wordpress.org/extend/
http://wordpress.org/extend/
http://www.wordpress.org/about/
http://wordpress.org/about/
http://www.wordpress.org/showcase/
http://wordpress.org/showcase/
---------------cortado----------------


Ejemplo:
ecasbas@laptop:/#./anemone pagedepth http://www.wordpress.org
Depth: 0 Count: 1
Depth: 1 Count: 17
Depth: 2 Count: 6
Depth: 3 Count: 4


Más ejemplos en:
ecasbas@laptop:/var/lib/gems/1.8/bin$ ls /var/lib/gems/1.8/gems/anemone-0.3.0/lib/anemone/cli
count.rb  cron.rb  pagedepth.rb  serialize.rb  url_list.rb


Una característica que me interesaba, era poder indicar el nivel de crawling, por defecto no limita la profundidad del crawling. Para ello, anemone tiene la opción :depth_limit.
En el archivo:
/var/lib/gems/1.8/gems/anemone-0.3.0/lib/anemone/core.rb
Cambiamos:
  # by default, don't limit the depth of the crawl
      :depth_limit => false,
por
  # by default, don't limit the depth of the crawl
      :depth_limit => 1,
para que realice un crawling de nivel 1.

Uno de los pocos inconvenientes es que sólo consigue URLs del dominio solicitado, si este apunta a otro dominio diferente no lo sigue.


UPDATE (27-1-2010): Es posible que para URLs con HTTPS al ejecutarlas de un error similar a: /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- net/https (LoadError).

Eso es debido a que no tenemos las librerias ssl de ruby, para solucionarlo bastará con:
sudo apt-get install libopenssl-ruby
o algo similar si tu sistema usa otro gestor de paquetes.


 


No hay comentarios:

Publicar un comentario

Trata a los demás como te gustaría ser tratado.