Spider / Crawler

lasizoillo lasizoillo en gmail.com
Lun Jun 30 23:34:10 CEST 2008


Buenas:

2008/6/30 Lic. Ariel Garcia Reyes <ariel en cfg.ausa.cu>:
> Estoy aprendiendo a programar en Python y mi meta por el momento es hacer un
> buscador
> necesito hacer un spider o crawler que indece sitios web en una db!
>

¿La base de datos es relacional o simplemente una base de datos? Supongo que te
refieres a lo segundo. Aunque una base de datos relacional no esta del
todo mal para
el crawler.

> alguien que me pueda orientar, dar concejos, ejemplos, algoritmos,
> documentacion, experiencia!?
>

Empieza por lo que no tienes que hacer con el crawler[1]

Una posible implementación del modulo que descarga datos lo tienes en
un ejemplo de eventlet [2]
aunque podrias hacer algo parecido con el modulo de la libreria
estandar urllib. Como
consejos: no descargues todas a la vez, usa un pool y ponle timeouts a
los sockets para
que una conexión que no funciona no te deje bloqueado el crawler.

Ya sabas que páginas no tienes que descargarte y sabes descargar
páginas. ¿Cuales?
Tienes que buscar enlaces en las páginas que te descargas para obtener más
páginas a procesar. Para procesar páginas está muy chulo
beautifulsoup[3], aunque quizá
para empezar te baste HTMLParser de la librería estandard. Si sólo vas a seguir
enlaces HTMLParser es más que necesario.

Ahora, usando una página de semilla podras recorrer el grafo de
páginas conectadas a él.
Pero todavía tienes que mirarte algunos algoritmos. Imaginate que caes
en una página que
tiene un calendario y vas recorriendo el siguiente mes hasta la
eternidad. Necesitas un
algoritmo de busqueda de parecidos para evitar este tipo de problemas.
Con ese algoritmo
podas el seguir haciendo un crawler.

El tratar de detectar el tiempo que tardan en actualizarse las páginas
te puede ser muy util.

Hasta ahora, solo hemos tratado la recogida de información. No su
tratamiento. Empecemos:
- Usa un stemmer como snowball[4] para obtener las raices de las
palabras. Te ayudará a
aproximar rebeldes y rebelión. "rebeldes del 2 de Mayo" y "Rebelión
del 2 de Mayo" deberian
devolver la misma cosa.
- Aunque quizá antes de usar el stemmer te interese ver en que idioma
está la página[5]
- Puedes ver algún buscador libre como xapian[6] para aprender de
algunos algoritmos que usa.
- Puedes buscar si hay microformatos[7] para ver cosas relevantes como
eventos o direcciones.
- ...

No te vas a aburrir si te pones a hacer un buscador. Y si haces uno
molón, por favor integralo
con pyndexter[8]. Estaré encantado de usarlo y muy posiblemente la
comunidad de python
te lo agradecerá.

[1] http://es.wikipedia.org/wiki/Est%C3%A1ndar_de_exclusi%C3%B3n_de_robots
[2] http://wiki.secondlife.com/wiki/Eventlet/Examples
[3] http://www.crummy.com/software/BeautifulSoup/
[4] http://snowball.tartarus.org/
[5] http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/326576
[6] http://xapian.org/docs/intro_ir.html
[7] http://microformats.org/
[8] http://swapoff.org/pyndexter


Un saludo:

Javi


>
> salu2
> ariel
>
> ___________
>
> Este mensaje ha sido analizado por Mailscanner
> Servicio de Protección contra virus A U S A - Sucursal Cienfuegos
>
>
> _______________________________________________
> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es