[Perl] Contenido de sites
Salvador Ortiz Garcia
sog@msg.com.mx
07 Feb 2002 01:40:42 -0600
On Wed, 2002-02-06 at 16:51, Luis Medrano Zaldivar wrote:
> Talvez no me explique bien...Lo que pasa es lo siguiente..
>=20
> Lo que quiero hacer es por ejemplo checar cuantos <p> tiene una pagina po=
r
> ejemplo y que me genere un reporte. Yo me acuerdo que
> perl tenia una funcion para hacer esto...pero no me acuerdo..
>=20
Ok, la cosa va en dos pasos, primero requieres traer el contenido de la
"pagina", para eso puedes usar la funci=F3n get del m=F3dulo LWP::Simple de
libwww-perl.
use LWP::Simple ();
$doc =3D LWP::Simple::get('http://www.foo.org/bar.html');
=20
Ahora, para parsear esa entidad depende de lo que necesites y tienes
b=E1sicamente tres opciones:
HTML::Parser Que es un parser completo de HTML, "conoce" la
estructura formal de de un documento HTML y mediante eventos
(callbacks) te permite hacer el analisis completo. Ideal si te
gusta la programaci=F3n orientada a eventos.
=20
HTML::Tree Que usando el m=F3dulo anterior es capas de construirte
el =E1rbol sint=E1ctico de tu documento, y procesarlo de diversas
formas. Ideal si requieres un mayor nivel de abstracci=F3n.
HTML::SimpleParse Que simplemente separa los 'tags' de texto en
un documento pero que, por ejemplo no sabe que dentro de <BODY> no
no se vale <HEAD>.
Por ejemplo, para simplemente contar los distintos tags del "home page"
del sitio de arriba, basta con:
use LWP::Simple;
use HTML::SimpleParse ();
$h =3D HTML::SimpleParse->new(get 'http://www.foo.org/');
for($h->tree) {
$t{uc($_->{content})}++ if $_->{type} eq 'starttag';
}
print "Encontre $t{$_} <$_>\n" for keys %t;
=20
Saludos.
Salvador Ortiz.