Bonjour,
comment peut on extraire certaines balises d'un fichier html et les stocker
dans un autre fichier,
exemple::je voudrais prendre ce qu'il ya dans la balise texte <texte>............</texte> et le stocker dans un fichier????????
Version imprimable
Bonjour,
comment peut on extraire certaines balises d'un fichier html et les stocker
dans un autre fichier,
exemple::je voudrais prendre ce qu'il ya dans la balise texte <texte>............</texte> et le stocker dans un fichier????????
Bonjour,
personnelement, j'utilise les expressions régulière mais il existe surement un module disponible sur cpan ;)
Les Expressions Rationnelles sont souvent la première idée qui vient à l'esprit pour parcourir et récupérer des informations dans du HTML. C'est naturel, on exploite les RE dans pleins de fichiers, ça marche bien, c'est du pur bonheur ...
Le problème, c'est que dans le cas du HTML, mais aussi du XML ou du SGML, c'est une idée finalement assez mauvaise.
En effet, on court ainsi divers risques, quant au formatage du code *ML (casse, sauts de lignes, etc.), et surtout quant à sa structure (tables ou autres balises imbriquées, et je ne parle même pas des paires de balises croisées tolérées par certaines versions de HTML : <b><i> </b></i> - Quelle horreur !).
La solution, dans ce cas est :
- soit de s'appuyer sur des modules existants dans la hiérarchie des HTML::*, XML::*, etc.
- soit de réinventer la roue (mais ça fait toujours plaisir, si c'est pour soi, et pas pour un besoin "industriel") et de "parser" soi-même le *ML
Dans le dernier cas, il est peut être préférable de ne pas s'appuyer sur des extractions entre paires de motifs, mais plutôt sur un parcours séquentiel du fichier, en gérant un état (une pile) des balises ouvertes/refermées et de leur contenu associé.
C'est du moins mon avis, et je dois avouer que j'ai mis longtemps à l'accepter, mais que depuis, c'est plus confortable ... (XML::Simple rulez pour mes besoins)
Moi j'ai le ti bout de code suivant
Exist'il un moyen plus efficace d'extraire les tags html ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 sub tags { my %page1 = @_; my $html = $page1{result}[1]; my ($titre, $charset, $robots, $keywords, $category, $description, $lang) = ('not_found') x 7; if ( $html =~ /<TITLE>([^\<]+)<\/TITLE>/ig ) { $titre = $1; } if ( $html =~ /<meta[^>]+charset=([^\"]+)\"[^>]*/isg ) { $charset = $1; } if ($html =~ m/robots/g && $html =~ /content=\"(.+)\">$/isg ) { $robots = $1; } if ($html =~ m/keywords/g && $html =~ /content=\"(.+)\">$/isg ) { $keywords = $1; } if ($html =~ m/category/g && $html =~ /content=\"(.+)\">$/isg ) { $category = $1; } if ($html =~ m/description/g && $html =~ /content=\"(.+)\">$/isg ) { $description = $1; } if ( $html =~ /^<meta.+content=(.+)\"$/isg ) { $lang = $1; } print "$titre\n"; print "$charset\n"; print "$robots\n"; print "$keywords\n"; print "$category\n"; print "$description\n"; }