• Publicidad

Creando un mini spider

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Creando un mini spider

Notapor SirBuce » 2007-12-18 03:42 @196

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.
SirBuce
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-04-11 09:39 @443

Publicidad

Notapor monoswim » 2007-12-18 06:34 @315

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... ;-)

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2007-12-18 11:50 @535

En CPAN hay unos cuantos spider, pero sería interesante que nos dijera exactamente qué es lo que quiere hacer.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor SirBuce » 2007-12-18 12:38 @568

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)
SirBuce
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-04-11 09:39 @443

Notapor explorer » 2007-12-18 13:05 @586

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor SirBuce » 2007-12-18 14:43 @655

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.
SirBuce
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2007-04-11 09:39 @443

Notapor Jenda » 2007-12-23 11:22 @515

monoswim escribiste: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
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron