PARSEUR (DE BALISE) HTML V1.0 ...

cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005 - 23 déc. 2003 à 09:42
etienne_benchmark Messages postés 1 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 26 juillet 2006 - 26 juil. 2006 à 14:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18901-parseur-de-balise-html-v1-0

etienne_benchmark Messages postés 1 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 26 juillet 2006
26 juil. 2006 à 14:29
Code très utile. Merci beaucoup. A LEGAULOIS aussi.
Juste une ultime correction : Si les paramètres ne sont pas de la forme : param="valeur" mais param=valeur, le programme freeze (boucle infinie).

Pour corriger ce petit bug, ajouter juste le "?" dans la ligne :
while (!(preg_match('/^(.*)(\'|")?$/', $property_current, $property_result))) {

de la fonction get_balise_property();
cs_joebuz Messages postés 321 Date d'inscription samedi 12 février 2005 Statut Membre Dernière intervention 21 février 2013
16 déc. 2005 à 03:16
je suis desole mais je ne comprends rien a comment ca marche ton truc, qu'est-ce que j'en fait de ton fichier html_parser.class.php
je l'ai met l'url que je veux parser
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
6 juin 2005 à 08:32
tu lance l'objet via => $object = new html_parser('http://www.url.com/);
donc enregistre ton contenu dans un fichier, puis traite-le

mais je suppose que c'est pour vérifier la non-présence de balises HTML dans ton formulaire
pour cela utilise: strip_tags()
pvincent4 Messages postés 1 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 16:38
Bonjour,
Petite question complémentaire à ce code source très efficace :)
Je désire parser une page HTML obtenue après le POST d'un formulaire :

<form action="http://www.machin.com/test.php" method="post" target="_self" style="display:inline">
</form>

Quelqu'un saurait-il comment faire pour récupérer le contenu de la page en question ?

Merci

Patrick
kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008
2 janv. 2005 à 23:20
serait-il possible décrire tout ce qu'on doit marquer stp... cela veut dire l'inclusion de la class. ou mettre ca dans un zip (en refaire un fonctionnel).

quand je met le script tel quel, il y a une erreur car il manque une appostrophe dans object= ...

quand je le change j'obtiens:

Warning: Wrong parameter count for implode() in c:\program files\easyphp\www\ftp\html_parser.class.php on line 50

merci de me répondre,

cordialement,
kevin (kegi@hotmail.com)
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
17 août 2004 à 12:03
je rappelle le problème : avec des balises courte du type b, i, etc. le parseur tente d'analyser les balises commençant de la même manière.

Pour corriger ce problème, il faut donc vérifier que l'on aà faire à la bonne balise ( à b et non à body, par exemple).

Pour cela, rajouter la condition suivante

/* début du code à rajouter dans la fonction parse_balise
juste après le teste de condition la ligne
if (preg_match($balise_mask, $html_line_content, $balise_result)) {
*/
if($balise_result[1] == "" OR $balise_result[1][0] == " ") {
// permet de vérifier que le caractère suivant la balise est soit une fermeture de balise soit un espace et donc n'est pas un caractère

/* ne pas oublier de fermer la condition, juste avant la fermeture de condition de if (preg_match($balise_mask, $html_line_content, $balise_result))

Pensez également que cette première condition apparait deux fois, il faut donc appliquer cela deux fois dans la fonction parse_balise */
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
26 juin 2004 à 17:13
ben g encore trouvé pti bug :
si tu ve analsyé balise ou enfin ce type de petite balise, le code bug: car il existe (pour la par exemple) d'autres balises commançant par la lettre b (ex:body) donc o final, le script essaye de les analyser alor k'elles ne correspndent pas a ce ke lon ve. La par contre je sé pa commen le gérer, car tu analys tout ce ki vien aprè le debut de ta balise <nom_balise(.*), et il fodré pour lui dire ke si le preier terme qui sui est une lettre alor ce né pa la balise kon ve analysé, a toi de voir jvé test d truc ;)
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
25 juin 2004 à 19:17
Ouais, assuré ! Désolé, j'avais pas vu les post avant, mais c'est super ta modif. Je m'étais rendu compte du problème et j'avais modifié quelque chose, mais j'ai pas updaté. Je vais le faire d'ici là.
Merci !
++
LS
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
8 juin 2004 à 20:26
bon g fé les modif nécessaires, ya deux parties, une dans la fonction get_balise_property() et l'autre dans la fonction parse_balise()

/* Codes permettant de transfomer les espaces des attributs par des {espace}
Appliquer ce code dans la fonction get_balise_property()
après la ligne contenant le code "$property_list = $argument_list[0];"
avant la ligne contenant le code "$tempovar = explode(' ', $property_list);"
*/

// explode tout en fonction des guillemets
$tempovar2 = explode('"', $property_list);
$nb_element_tempovar2 = count($tempovar2);
$property_list = "";
$property_list2 = array();
for($i = "0";$i < $nb_element_tempovar2; $i++) {
// verifie si présence =, si = existe alors rien, sinon c'est le contenu d'un attribut
if(!ereg('=', $tempovar2[$i])) {
// on remplace l'espace des attributs par {espace} pour éviter de les traiter par la suite
$tempovar2[$i] = str_replace(" ", "{espace}", $tempovar2[$i]);
}
}
$property_list = implode('"', $tempovar2);

// explode tout en fonction des quotes
$tempovar2 = explode("'", $property_list);
$nb_element_tempovar2 = count($tempovar2);
$property_list = "";
$property_list2 = array();
for($i = "0";$i < $nb_element_tempovar2; $i++) {
// verifie si présence =, si = existe alors rien, sinon c'est le contenu d'un attribut
if(!ereg('=', $tempovar2[$i])) {
// on remplace l'espace des attributs par {espace} pour éviter de les traiter par la suite
$tempovar2[$i] = str_replace(" ", "{espace}", $tempovar2[$i]);
}
}
$property_list = implode("'", $tempovar2);
/* Fin du code à ajouter dans la fonction get_balise_property() */



/* Codes permettant de transfomer les {espace} en espaces dans les attributs
Appliquer ce code dans la fonction parse_balise()
après la ligne contenant le code "$balise_current = $this -> get_balise_property($balise_result[1]);"
A noter: cette ligne est écrite deux fois, il faut donc appliquer le code aux deux endroits
*/
$balise_current = str_replace("{espace}", " ", $balise_current);
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
8 juin 2004 à 17:25
Je viens de tester tton truc, c nikel mais g un pti bug a reporté
=> si ya un epsace dan un d attribu t niké

ds function get_balise_property(),
tu fé un explode d espace
$tempovar = explode(' ', $property_list);
du coup si ya un espace ds un d attribu, cela ne marche pas toujours.

sinon tré bon bou de code, bravo
Dark_Genova Messages postés 26 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 20 août 2007
15 avril 2004 à 15:35
C'est pas sur ce sute que tu trouveras de bons commentaires ..; en tout cas bien jouer pour le parseur LocalStone, je ne connaissais paq trop ce truc. Au moins j'apprend de nouvelles choses tous les jours.
++
cs_zztop Messages postés 3 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 16 février 2004
16 févr. 2004 à 01:46
Je pensais trouver de bons et sérieux commentaires ! Là franchement, je suis très deçu.
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
13 févr. 2004 à 11:26
Ouais t'as raison ... Sert toi du petit X en haut à droite de ta page Internet.
tropdemauvais Messages postés 1 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 3 février 2004
3 févr. 2004 à 00:20
Bonjour,
ce code ....est vachement utile AUX MOUCHES POUR VOLER? non
Enfin ca encombre les moteurs de recherche
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
30 déc. 2003 à 23:26
require_once('lapageouyalaclasse');
cs_zztop Messages postés 3 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 16 février 2004
30 déc. 2003 à 14:56
oups, je ne suis qu'un pauvre débutant ! Là, tu vas rire sans doute mais comment fait on pour ajouter la class html_parser dans le fichier ? Je la trouve où cette class ?
Peux tu me la fournir ? Que dois écrire comme code pour que ça marche ?
Merci de votre aide ;o)
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
30 déc. 2003 à 14:35
la classe doit etre incluse dans le fichier...
cs_zztop Messages postés 3 Date d'inscription mercredi 26 mars 2003 Statut Membre Dernière intervention 16 février 2004
30 déc. 2003 à 14:28
Fatal error: Cannot instantiate non-existent class: html_parser in ...parser.php on line 2
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
30 déc. 2003 à 12:07
ok bon bein tant pis...
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
30 déc. 2003 à 11:25
Euh ... En tous cas pas avec cette source, parce que à moins de rentrer toutes les balises existantes et les afficher une par une ou quelque chose comme ça je ne vois pas.
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
30 déc. 2003 à 07:58
et pour faire un colorisateur ?
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
24 déc. 2003 à 14:11
Ahh, ok!!!!
C’est vrai que ça peut être très utile !!

Merci pour la culture !! ;o)
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
24 déc. 2003 à 12:00
Ha là là ... J'aurais du faire plus de doc, je l'avais bien dit ! ;D
Alors ce parseur (du verbe parse en anglais qui signifie analyser) télécharge le code source une page web (http://www.voila.fr/, par exemple) et ensuite, il analyse la source pour trouver toutes les balises que tu recherches ( si c'est pour les liens ou bien
si tu veux les tableaux, etc.) et te renvoie les résultats sous forme d'array qui contient toutes les propriétés de la balise (onclick, style, etc.) ainsi que le contenu.
Une fois que tu as ce tableau tu peux utiliser les infos de la page web distante pour les afficher sur ton propre site.
Perso, je l'ai écrit pour piquer les liens de toutes les images d'un site pour ensuite les télécharger sans passer par le site.
Donc en gros, l'array qui t'est renvoyé, t'en fait ce que tu veux !
++ et si tu as d'autres question, hésite pas !
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
24 déc. 2003 à 10:57
Heuu !!!
J’ai rien pigé !! ^_^*
Ca sert à quoi un parseur ?????
pq ton tableau j'en fais quoi après?
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
23 déc. 2003 à 18:58
Euh bah ... Merci ;D !!!
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
23 déc. 2003 à 09:55
ha je pensais que c'était une colorisateur de code html... mais ton truc c'est exellent !!!
j'adore :) beau travail !! lache pas ;)
cs_koko Messages postés 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 février 2005
23 déc. 2003 à 09:42
cool un parseur :) vais vite regarder ca ;)
Rejoignez-nous