• Publicidad

Utilizando HTML::Parser

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Utilizando HTML::Parser

Notapor ragnar131 » 2008-05-06 05:55 @288

Buenas.

Veréis, estoy intentando aprender a utilizar el módulo HTML::Parser, para seleccionar únicamente unas etiquetas de un fichero XHTML.

Tal y como me habían contado el funcionamiento de este módulo, hay que indicarle un "evento" para que se fije en él.

Mi intención, sería obtener el texto contenido entre las etiquetas <h1>, </h1>, <p> y </p> del texto que descargo según el siguiente código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;
use HTML::Parse;
use HTML::FormatText;

use strict;
my $articulo;
my $formatText;
my $seleccion;
my @array;

`wget http://meneame.net/story/86-directores- ... contenidos -O articuloDePrueba`;
$articulo = `cat articuloDePrueba`;
$formatText = HTML::FormatText->new->format(parse_html($articulo));
$seleccion =  HTML::Parser->new( api_version => 3,
                         #start_h => [\&start, "tagname, attr"],
                         start_h => [\&start, "h1, text"],
                         end_h   => [\&end,   "p"],
                         marked_sections => 1,
               );

# $seleccion = HTML::Parser->new(api_version => 3,
#                        handlers => { text => [\@array, "event,text"],
#                                      comment => [\@array, "event,text"],
#                                    });

open F, ">PRUEBA";
print F "$seleccion";
foreach $seleccion (@array){
        print F "$seleccion";
}
close F;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El código aún tiene resquicios de varios intentos que he realizado, tristemente, sin resultados satisfactorios.

¿Podríais darme alguna idea de cómo actuar con este módulo?

Gracias por vuestro tiempo y atención, recibid un cordial salud, Aitor.
ragnar131
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-04-03 13:23 @599

Publicidad

Notapor explorer » 2008-05-06 07:13 @342

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use warnings;
use strict;

use HTML::Parser;
use LWP::Simple;

my $estamos_dentro_de_marca = 0;
my $articulo = get('http://meneame.net/story/86-directores-prensa-son-presionados-para-influir-contenidos');

sub start {
    my $tag = shift;
    return if $tag ne 'h1' and $tag ne 'p';
    $estamos_dentro_de_marca = 1;
}

sub end {
    my $tag = shift;
    return if $tag ne 'h1' and $tag ne 'p';
    $estamos_dentro_de_marca = 0;
}

sub texto {
    return if not $estamos_dentro_de_marca;
    print "$_[0]\n\n";
}

my $parser = HTML::Parser->new(
    api_version => 3,
    handlers    => [
        start   => [ \&start, "tagname" ],
        end     => [ \&end,   "tagname" ],
        text    => [ \&texto, "dtext"   ],
    ],
    marked_sections => 1,
);

$parser->parse($articulo);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Código: Seleccionar todo
explorer@joaquin:~/Documents/Desarrollo> ./kk.pl
Un 86% de los directores de prensa son presionados para influir en los contenidos

El mayor porcentaje de las injerencias externas, un 76,5 por ciento, está relacionado con el intento de evitar la publicación de una noticia, mientras que un 71,2 por ciento de los directores afirma que ha recibido presiones relacionadas con amenazas de retirada de la publicidad.


De todas formas, creo que debe haber mejores formas que este módulo. Me parece demasiado complejo para lo que quieres 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 ragnar131 » 2008-05-12 05:54 @287

Previo a todo, gracias por responder y pido disculpas por no haber escrito antes. Llevo unos días sin conexión a causa de la compañía.

Más que el código, preguntaba por el funcionamiento, pero con lo puesto y un par de pruebas, he podido entender su funcionamiento a grosso modo.

Así que una vez más, ¡Gracias!
ragnar131
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-04-03 13:23 @599


Volver a Módulos

¿Quién está conectado?

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