Mar May 06, 2008 4:55 am
|
 |
ragnar131
Perlero Nuevo

|
Registrado: 03 Abr 2008
Mensajes: 8
|
|
| Utilizando HTML::Parser |
|
|
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. |
|
|
|

Mar May 06, 2008 6:13 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3539
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|

Lun May 12, 2008 4:54 am
|
 |
ragnar131
Perlero Nuevo

|
Registrado: 03 Abr 2008
Mensajes: 8
|
|
|
|
|
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! |
|
Powered by phpBB © 2001, 2005 phpBB Group
|