Parser html avec perl

Fermé
fedo - 15 mars 2009 à 21:18
 fedodido - 15 mars 2009 à 23:39
Bonjour,
mon probleme consiste à convertir une page html en fichier texte pour pouvoir recuperer le texte de cette page.
jusqu'a mnt j'arrive a convertir cette page en fichier xml ke j'enregistre sous format ".txt",
et je recupere des les lignes voila le script que j'utilise:

# file: htmlToXml.pl

use chilkat;

# Perl script to convert HTML files to well-formed XML

$htmlConv = new chilkat::CkHtmlToXml();
$success = $htmlConv->UnlockComponent("anything for 30-day trial");
if (! $success) {
print "component is locked!\n";
exit;
}

$htmlConv->ConvertFile("test.html","test1.txt");
$i=0;
open (F, "test1.txt") || die "Problème pour ouvrir";
while (<F>) {
if($_ =~ /<text>(.+)<\/text>*/)
{

print "$1 \n";
}


}
close F;

cependant je n'arrive pas à recuperer les paragraphe je pense ke parske dans mon script je precise ke la ligne à afficher doit commencer par la balise <text> .

est ce ke kelk un peut m aider je suis vraiment bloqué,merci d'avance
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
15 mars 2009 à 22:14
Salut,

Si la méthode n'importe alors tu peux utiliser le programme html2text

Sinon pour parser html tu peux utiliser HTML::PARSER au lieu de passer par XML.
0
merci pour ton aide, mais j ai tro essayer et ça marche pas
j ai pris des scripts de html::parser mais ça marche je ne sais pas comment ça fonctionne ex:

#!/usr/bin/perl
use strict;
use warnings;

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

my $page = get( "lien");

# création de mon parser
my $parser = HTML::Parser->new();

# définition des mes evenements
$parser->handler( text => \&text, "text" );
$parser->handler( start => \&start, "tagname,attr" );
$parser->handler( end => \&end, "tagname" );

$parser->parse($page);

print &get_data();

parser->eof;
{
my $in;
my @data;

sub start {
my ($tag, $attr) = @_;
$in++
if $tag eq 'div'
and exists $attr->{id}
and $attr->{id} eq 'profilename';
}

sub end {
my ($tag) = @_;
$in-- if ($tag eq 'div' and $in='1');
}

sub text {
my ($text) = @_;
push @data, $text if ($in );
}

sub get_data {
#print "in : ".$in;
return @data;
}

}
exit;

mais ça ne me donne rien
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
15 mars 2009 à 23:34
Re,

Je suis désolé mais ce soir je n'ai plus le temps.
Si tu ne trouves pas une solution je regarderai demain soir.
0
ok merci meme si je suis pressée mais c'est gentil de ta part je ne veux pas quand meme te deranger,bonne chance
0