begin process at 2012 02 12 21:53:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

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

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


 Information sur la source

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Niveau :Initié Date de création :22/12/2003 Vu / téléchargé :6 745 / 790

Auteur : LocalStone

Ecrire un message privé
Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

 Description

Salut à tous,
Donc pour apprendre la POO, j'ai décidé d'encapsuler un vieux parseur d'HTML que j'avais écrit y a ... une semaine. Donc voilà le résultat. Il parse n'importe quelle balise, et gère l'imbrication de 2 balises identiques (par exemple '<div>BALISE 1<div>BALISE 2</div></div>' en revoyant d'abord la balise 1 puis la balise 2) ainsi que les propriété des balises quelque soit la façon dont elle sont écrite.
Il n'y a pas de fonction autre pour l'instant parce que je ne savais pas quoi mettre ... Mais ça a le merite de fonctionner.

Source

  • /* ----------------------- */
  • // Donc utilisation : //
  • /* ----------------------- */
  • $object = new html_parser('http://www.url.com/);
  • $link_list = $object -> parse_balise('<a></a>');
  • $img_list = $object -> parse_balise('<img />');
  • /* ----------------------- */
  • Et ça renvoie un tableau indexé avec chaque index qui contient la balise avec le contenu si il y en a un (['content']) et les propriétés (['href'], ['onclick'], etc ...).
/* ----------------------- */
// Donc utilisation :       //
/* ----------------------- */
$object = new html_parser('http://www.url.com/);
$link_list = $object -> parse_balise('<a></a>');
$img_list = $object -> parse_balise('<img />');
/* ----------------------- */
Et ça renvoie un tableau indexé avec chaque index qui contient la balise avec le contenu si il y en a un (['content']) et les propriétés (['href'], ['onclick'], etc ...). 

 Conclusion

Je sais, ça merite plus de documentation et de commentaire et c'est pour ça qu'une mise à jour est prévu pour ... Bientôt !
(c) LocalStone :D

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR D'ASPECT POUR PHP
Source avec Zip [PHPHOOK] UN PETIT SYSTÈME DE GESTION DES HOOKS DE SUBVERSIO...
Source avec Zip [PHP5] TASKSCHEDULER, UN PETIT PLANIFICATEUR DE TÂCHE EN PHP...
Source avec Zip [PHP5] NAVIGUER DANS UNE COLLECTION À L'AIDE D'UNE PSEUDO SY...
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

Commentaires et avis

Commentaire de koko le 23/12/2003 09:42:01

cool un parseur :) vais vite regarder ca ;)

Commentaire de koko le 23/12/2003 09:55:52

ha je pensais que c'était une colorisateur de code html... mais ton truc c'est exellent !!!
j'adore :) beau travail !! lache pas ;)

Commentaire de LocalStone le 23/12/2003 18:58:04

Euh bah ... Merci ;D !!!

Commentaire de perig le 24/12/2003 10:57:17

Heuu !!!
J'ai rien pigé !! ^_^*
Ca sert à quoi un parseur ?????
pq ton tableau j'en fais quoi après?

Commentaire de LocalStone le 24/12/2003 12:00:57

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 (&lt;a&gt;&lt;/a&gt; si c'est pour les liens ou bien &lt;table&gt;&lt;/table&gt; 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 !

Commentaire de perig le 24/12/2003 14:11:15

Ahh, ok!!!!
C'est vrai que ça peut être très utile !!

Merci pour la culture !! ;o)

Commentaire de iubito le 30/12/2003 07:58:29

et pour faire un colorisateur ?

Commentaire de LocalStone le 30/12/2003 11:25:40

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.

Commentaire de iubito le 30/12/2003 12:07:14

ok bon bein tant pis...

Commentaire de zztop le 30/12/2003 14:28:11

Fatal error: Cannot instantiate non-existent class: html_parser in ...parser.php on line 2

Commentaire de koko le 30/12/2003 14:35:25

la classe doit etre incluse dans le fichier...

Commentaire de zztop le 30/12/2003 14:56:53

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)

Commentaire de LocalStone le 30/12/2003 23:26:27

require_once('lapageouyalaclasse');

Commentaire de tropdemauvais le 03/02/2004 00:20:22

Bonjour,
ce code ....est vachement utile AUX MOUCHES POUR VOLER? non
Enfin ca encombre les moteurs de recherche

Commentaire de LocalStone le 13/02/2004 11:26:51

Ouais t'as raison ... Sert toi du petit X en haut à droite de ta page Internet.

Commentaire de zztop le 16/02/2004 01:46:39

Je pensais trouver de bons et sérieux commentaires ! Là franchement, je suis très deçu.

Commentaire de Dark_Genova le 15/04/2004 15:35:48

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.
++

Commentaire de legaulois le 08/06/2004 17:25:52

Je viens de tester tton truc, c nikel mais g un pti bug a reporté
=&gt; 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

Commentaire de legaulois le 08/06/2004 20:26:32

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 &lt; $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 &lt; $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 -&gt; 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);

Commentaire de LocalStone le 25/06/2004 19:17:38

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

Commentaire de legaulois le 26/06/2004 17:13:13

ben g encore trouvé pti bug :
si tu ve analsyé balise &lt;b&gt; ou &lt;i&gt; enfin ce type de petite balise, le code bug: car il existe (pour la &lt;b&gt; 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 &lt;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 ;)

Commentaire de legaulois le 17/08/2004 12:03:22

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 */

Commentaire de kegi le 02/01/2005 23:20:35

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)

Commentaire de pvincent4 le 19/05/2005 16:38:57

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">
<input type="text" size="10" name="tel" /><input type="submit" value="Go" /></form>

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

Merci

Patrick

Commentaire de legaulois le 06/06/2005 08:32:08

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()

Commentaire de joebuz le 16/12/2005 03:16:21

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

Commentaire de etienne_benchmark le 26/07/2006 14:29:31

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();

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales