Perl en Español

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

Utilizando HTML::Parser

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Mar May 06, 2008 4:55 am
ragnar131
Perlero Nuevo
Perlero Nuevo
Registrado: 03 Abr 2008
Mensajes: 8
Utilizando HTML::Parser Responder citando

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.

Perl:
#!/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-prensa-son-presionados-para-influir-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;


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.
Mensaje Mar May 06, 2008 6:13 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3823
Ubicación: Valladolid, España
Responder citando

Perl:
#!/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);

Código:
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.
Mensaje Lun May 12, 2008 4:54 am
ragnar131
Perlero Nuevo
Perlero Nuevo
Registrado: 03 Abr 2008
Mensajes: 8
Responder citando

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!
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group