etienne_benchmark
Messages postés1Date d'inscriptionmercredi 26 juillet 2006StatutMembreDernière intervention26 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és321Date d'inscriptionsamedi 12 février 2005StatutMembreDernière intervention21 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és20Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention11 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és1Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention19 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 :
Quelqu'un saurait-il comment faire pour récupérer le contenu de la page en question ?
Merci
Patrick
kegi
Messages postés164Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention25 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és20Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention11 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és20Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention11 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és514Date d'inscriptionmercredi 19 mars 2003StatutMembreDerniè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és20Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention11 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és20Date d'inscriptionjeudi 20 mars 2003StatutMembreDernière intervention11 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és26Date d'inscriptionlundi 12 avril 2004StatutMembreDernière intervention20 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és3Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention16 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és514Date d'inscriptionmercredi 19 mars 2003StatutMembreDerniè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és1Date d'inscriptionmardi 3 février 2004StatutMembreDerniè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és514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009 30 déc. 2003 à 23:26
require_once('lapageouyalaclasse');
cs_zztop
Messages postés3Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention16 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 30 déc. 2003 à 14:35
la classe doit etre incluse dans le fichier...
cs_zztop
Messages postés3Date d'inscriptionmercredi 26 mars 2003StatutMembreDernière intervention16 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és629Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention 9 octobre 2006 30 déc. 2003 à 12:07
ok bon bein tant pis...
LocalStone
Messages postés514Date d'inscriptionmercredi 19 mars 2003StatutMembreDerniè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és629Date d'inscriptionmercredi 3 juillet 2002StatutMembreDernière intervention 9 octobre 2006 30 déc. 2003 à 07:58
et pour faire un colorisateur ?
perig
Messages postés358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDerniè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és514Date d'inscriptionmercredi 19 mars 2003StatutMembreDerniè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és358Date d'inscriptionvendredi 1 novembre 2002StatutMembreDerniè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és514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009 23 déc. 2003 à 18:58
Euh bah ... Merci ;D !!!
cs_koko
Messages postés654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 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és654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 23 déc. 2003 à 09:42
26 juil. 2006 à 14:29
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();
16 déc. 2005 à 03:16
je l'ai met l'url que je veux parser
6 juin 2005 à 08:32
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()
19 mai 2005 à 16:38
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
2 janv. 2005 à 23:20
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)
17 août 2004 à 12:03
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 */
26 juin 2004 à 17:13
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 ;)
25 juin 2004 à 19:17
Merci !
++
LS
8 juin 2004 à 20:26
/* 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);
8 juin 2004 à 17:25
=> 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
15 avril 2004 à 15:35
++
16 févr. 2004 à 01:46
13 févr. 2004 à 11:26
3 févr. 2004 à 00:20
ce code ....est vachement utile AUX MOUCHES POUR VOLER? non
Enfin ca encombre les moteurs de recherche
30 déc. 2003 à 23:26
30 déc. 2003 à 14:56
Peux tu me la fournir ? Que dois écrire comme code pour que ça marche ?
Merci de votre aide ;o)
30 déc. 2003 à 14:35
30 déc. 2003 à 14:28
30 déc. 2003 à 12:07
30 déc. 2003 à 11:25
30 déc. 2003 à 07:58
24 déc. 2003 à 14:11
C’est vrai que ça peut être très utile !!
Merci pour la culture !! ;o)
24 déc. 2003 à 12:00
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 !
24 déc. 2003 à 10:57
J’ai rien pigé !! ^_^*
Ca sert à quoi un parseur ?????
pq ton tableau j'en fais quoi après?
23 déc. 2003 à 18:58
23 déc. 2003 à 09:55
j'adore :) beau travail !! lache pas ;)
23 déc. 2003 à 09:42