Página 1 de 5

Obtener código web desde Perl

NotaPublicado: 2011-05-15 10:18 @471
por nobody
Hola buenas, es mi primer post y no sé si iría aquí...

He leído un post bastante similar al mio pero creo que trabajaba desde Linux :S

La cosa es que me gustaría coger el código fuente de una web o el formulario XML que me devuelve al introducir una URL...

Me gustaría guardarlo en un archivo o una variable para después buscar un número xx,xxx dentro de ese archivo o variable.

Había pensado hacerlo con wget pero me gustaría no tener que instalar ningún programa. Como trabajo desde Windows me gustaría que fuese sin tener que meterle nada, con lo que trae de serie... ¿Mediante telnet? ¿O mejor me recomendáis algún módulo ya hecho?

¡ Gracias !

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 11:34 @523
por explorer
Bienvenido a los foros de Perl en español, nobody.

Dices que no quieres instalar nada en Windows, pero, claro, el Perl sí que has tenido que instalarle... ;)

Para obtener la respuesta de una petición HTTP te vale con usar el módulo LWP::Simple, que viene incluido de base con el Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!Perl
  2.  
  3. use LWP::Simple;
  4.  
  5. $contenido = get("http://www.sn.no/");
  6.  
  7. print "$contenido\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Más información en lwpcook.

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 11:56 @538
por nobody
¡¡¡ Pensaba que lo tenía que instalar !!! ¡¡¡ Me estaba volviendo loco intentando instalarlo !!! :(

Una cosa... Estaba mirando tu guía del ppm... Y yo no tengo ninguna interfaz del ppm :S Solo lo puedo usar desde cmd... ¿ Por qué ? En tus fotos veo como un gestor de paquetes y eso... ¿¿Por qué yo no lo tengo?? jejeje

Explorer, muchas gracias, voy a probar y supongo que tendré alguna dudilla más.

PD: Anteriormente ya hice hace unos años mis pinitos en Perl... Un cliente de IRC, concretamente con IO::Socket A ver si me pongo al día :D

Y gracias de nuevo ;)

PD2: Ya tengo mi primer problemilla xDDD Igual es porque la URL es muy larga pero no me funciona esto:
$contenido = get ("http://bolsaphp.sukiweb.net/api/cv_api.php?usuario=nobo&%20api_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&%20ticker=BBVA.MC")

Las xxxxxxxx claramente es la contraseña de mi user... ¿ Por qué puede ser que no funcione ?

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 12:37 @567
por explorer
Todos los ActiveState modernos traen un gestor gráfico PPM. Solo tienes que arrancarlo desde el menú de ActiveState dentro de Programas.

El porqué no se puede bajar la URL puede ser por muchas causas... Algunas de ellas:

  • puede que esa web tenga un control de sesiones mediante cookies, y LWP::Simple no está enviando ninguna
  • puede que el servidor web se está dando cuenta de que el cliente es LWP, por lo que denegará cualquier acceso (esto es muy normal)


Prueba con algo más sencillo: http://bolsaphp.sukiweb.net/?ticker=BBVA.MC

Si no te deja, tendrás que investigar por qué causa. Si sospechas que es que están filtrando las peticiones LWP, deberás falsear tu petición, usando LWP::UserAgent, tal y como indica el manual de LWP::Simple. O usar una herramienta más poderosa, como WWW::Mechanize o usar lo último en rascado web con Perl: Scrappy.

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 12:43 @571
por nobody
¡Ajam! Justo ahora iba a postear: más fácil todavía: http://bolsaphp.sukiweb.net/

La cosa es que ¡¡¡ nada de nada !!! El problema reside en que le intento hacer un ping y no me lo devuelve:

C:\Users\RASH>ping http://bolsaphp.sukiweb.net/
La solicitud de ping no pudo encontrar el host http://bolsaphp.sukiweb.net/. Compruebe el nombre y
vuelva a intentarlo.

¿Esto a qué es debido? Le busco donde está alojada y http://geo.flagfox.net/?ip=67.225.216.21&host=bolsaphp.sukiweb.net

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 12:52 @578
por explorer
El comando ping no admite URL. Debes darle una IP o el nombre de un servidor.

Más información de ping, en la Wikipedia.

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 12:58 @582
por nobody
Pero Google sí lo admite... Y con Google sí me funciona el LWP :S

SS3.SUKIWEB.NET es el dominio. ¿No?

Entonces... ¿Podría usar eso en LWP para acceder a la página de bolsaphp ?

Estoy un poco perdido :S

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 13:46 @615
por explorer
A mí sí que me funciona...

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -MLWP::Simple -E '$contenido = get("http://bolsaphp.sukiweb.net/"); say $contenido'
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


(cuidado: yo estoy en Linux, por lo que hay que cambiar las comillas si estás en Windows)

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 15:44 @697
por nobody
Unrecognized switch: -E (-h will show valid options).

... :S

Re: Obtener código web desde Perl

NotaPublicado: 2011-05-15 17:51 @785
por explorer
Eso indica que tienes instalado un Perl muy viejo.

Prueba a cambiar -E por -e

O poner un Perl igual o superior a v5.10.