Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Creando un mini spider

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Mar Dic 18, 2007 2:42 am
SirBuce
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Abr 2007
Mensajes: 7
Creando un mini spider Responder citando

Buenas,

Ya he conseguido patearme una url y coger los enlaces... pero necesito que luego por cada enlace siga persiguiendo enlaces...

Bueno, el tema es una función recursiva pero no me queda muy claro...

¿Alguien podría asesorarme un poco?

Gracias y un saludo.
Mensaje Mar Dic 18, 2007 5:34 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

La función debería llamarse a si misma, suponte que la función recibe un @array de parámetro con las URL...

Una vez que estás en la función y capturas tus nuevas URL debes llamar a la misma función con los nuevos parámetros...

O sino puedes ir escribiendo las URL en archivos TXT y hacer una función que vaya chequeando si hay nuevos TXT, que lo lea y baje las URL a un nuevo archivo...

Me gusta más la 2ª opción porque te deja registrado todas las URL... Wink

Saludos
Mensaje Mar Dic 18, 2007 10:50 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

En CPAN hay unos cuantos spider, pero sería interesante que nos dijera exactamente qué es lo que quiere hacer.
Mensaje Mar Dic 18, 2007 11:38 am
SirBuce
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Abr 2007
Mensajes: 7
Responder citando

Buenas,

Lo que al principio estaba pensado para hacer una aplicación de prueba de carga de una web... está derivando en el "desarrollo" de un minispider ^_^

Yo leo una URL, cojo el HTML, luego extraigo solo los LINKS de ese HTML y así voy recorriendo todas las URL del sitio.

Luego el analizar el HTML ya es otra cosa para hacerlo funcionar como spider... ^_^

La duda que tengo es cómo recorrer todos los enlaces...

Tengo que mirar si con una función recursiva (no me gusta) o con árboles... (me tengo que documentar)
Mensaje Mar Dic 18, 2007 12:05 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

Con WWW::Mechanize es muy fácil el recoger los enlaces de una página.

Luego, para recorrer los enlaces de forma recursiva, te vale con tener un hash -global- de %enlaces_visitados.

Como parámetros de entrada serían los enlaces que tienes que visitar (una lista de). Por cada página enlazada, le extraes sus enlaces y la marcas como visitada. Y como condición de parada de la función recursiva miras a ver antes si el enlace ya ha sido visitado.

Para inspirarte, he encontrado dos ejemplos:
* WWW::CheckSite
* Working with LWP Vete al listado 4.
Mensaje Mar Dic 18, 2007 1:43 pm
SirBuce
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Abr 2007
Mensajes: 7
Responder citando

Gracias por contestar explorer.

Tengo todo resuelto menos la función recursiva, uso LWP pero no uso el modulo de WWW para los enlaces, tengo una función que parsea con expresión regular.

Ahora que acabo de llegar a casa voy a ver si me pongo un poco con la función recursiva a ver cómo me lo monto ^_^

He estado mirando ejemplos, nunca he usado función recursiva aunque todos hemos conocido el ejemplo con el factorial jejeje

Según vaya avanzando si tengo alguna duda os la iré exponiendo.

Gracias.
Mensaje Dom Dic 23, 2007 10:22 am
Jenda
Perlero Frecuente
Perlero Frecuente
Registrado: 29 Oct 2007
Mensajes: 104
Ubicación: Praga, Republica Checa
Responder citando

monoswim escribió:
O sino puedes ir escribiendo las URL en archivos TXT y hacer una función que vaya chequeando si hay nuevos TXT, que lo lea y baje las URL a un nuevo archivo...

Me gusta más la 2ª opción porque te deja registrado todas las URL... ;-)

Saludos


No hay razón para guardar las URL en archivos, puedes push() los URL que encuentras en la página que bajas en un @array y después shift() un URL de este array cuando terminas procesando la página.

Lo que debes hacer es hacerse seguro que no bajas la misma pagina multiple veces. Tambien deberias poder limitar la nivel a que sucedes siguiendo los links. Y posiblemente el sitio en que sigues los links y ignorar los links a los otros sitios.

Jenda
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group