Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PARSER HTML


Information sur la source

Catégorie :Réseaux & Internet Source .NET ( DotNet ) Classé sous : html, parser, dom, tag Niveau : Débutant Date de création : 09/01/2007 Date de mise à jour : 10/01/2007 16:15:11 Vu / téléchargé: 12 292 / 931

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Ce code est une lib qui permet d'accéder la structure d'une page HTML

Sa tolérance sur la qualité du code HTML est certes inférieur aux navigateurs mais suffisent pour la plupart des applis ou je l'ai utilisé

 

Source

  • (tout est dans le zip)
(tout est dans le zip)

Conclusion

Bientot quand le html sera bien formaté, on pourra utiliser un parseur xml mais pour l'instant... n'hésitez par à le tester et a me faire parvenir l'url des pages qui mettre ce code a genoux :(
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

10 janvier 2007 16:15:11 :
Le projet est passé en .NET 2. Remplacement des ArrayList pas des listes génériques. J'ai ajouté une form pour que la démo soit un peu plus visuelle (voir capture) L'instance d'un document se fait désormais par la méthode statiques HtmlDocument.CreateDocument(Uri), qui teste la validité de l'url et du chargement de la page

Commentaires et avis

signaler à un administrateur
Commentaire de Bidou le 09/01/2007 19:26:16 administrateur CS

C'est assez dur de faire quelques chose qui tient la route dut à la souplesse de l'HTML bien sûr ;-)
Quelques remarques en vrac après une RAPIDE lecture:

- Dans la classe MainClass, l'url de teste (google) n'est pas valide.
- Pourquoi utiliser sans cesse le nom des classes (System.String, System.Boolean) plutôt que leurs mots clefs associés (string, bool) ?
- La méthode GetHtmlChars de HtmlChars retourne toujours null !?
- Détail: pour les types enum, on met en principe des MAJ
- Le code peut être simplifier à certains endroits, exemple:

if (iChars[pChar] == '"')
{
   bIsInString = !bIsInString;
   iAttributeLength++;
}
else
{
   iAttributeLength++;
}

devient

if (iChars[pChar] == '"') bIsInString = !bIsInString;
iAttributeLength++;

autres exemple avec oStackNode.Add(oNode); (peut-être y'en a encore d'autres)

- Les méthodes GetImageReferences, GetScriptReferences, GetLinkTagReferences et GetAnchorReferences sont très redondantes!
- Debug.WriteLine("VAL: '" + sTagValue + "'"); => Debug.WriteLine("VAL: '{0}'", sTagValue);


Voilà pour un début.
Sinon le code à l'air plutôt structuré...

signaler à un administrateur
Commentaire de thiosyiasar le 09/01/2007 19:45:23

effectivement...

ce code est ressorti d'une vielle valise!

une petite remise au propre s'impose...

merci pour tes remarques Bidou

(to be continued...)




signaler à un administrateur
Commentaire de GG29 le 09/01/2007 21:01:11

A la place de if(a == "") on peut utiliser if(a == String.Empty) ou encore
if(String.IsNullOrEmpty(a)) , ce qui est quand même plus jolie à mon goût.
Autrement ce code peut être pratique dans une appli.

signaler à un administrateur
Commentaire de badrbadr le 10/01/2007 12:27:34

Une alternative est d'utiliser le contrôle WebBrowser qui permet d'accéder à l'arbre DOM de la page html. C'est aussi tolérant que peut l'être Internet Explorer :)

signaler à un administrateur
Commentaire de thiosyiasar le 10/01/2007 13:16:35

C'est vrai, mais le probleme c'est que ce composant charge la page et toutes les ressouces images, scripts.... avant d'y donner l'accès (j'ai une appli qui l'utilise). Le temps de traitement donc plus lent et peu adapté à une analyse sur plusieurs pages.

( Je suis en train de remettre à jour avec une démo un peu plus visuelle :) et un code plus propre)


signaler à un administrateur
Commentaire de FREMYCOMPANY le 11/02/2007 18:05:38

J'ai lu dans un blog qu'un projet similaire au tiens avait vu le jour.
Je l'ai essayé et il me semblait que ca tenait la route...

signaler à un administrateur
Commentaire de thiosyiasar le 12/02/2007 03:25:03

Salut FremyCompany,

T'as plus d'infos sur le blog ou le projet ?

signaler à un administrateur
Commentaire de FREMYCOMPANY le 12/02/2007 16:48:13

Re-bonjour à toi, si je l'ai retrouvé, il s'agit de l'HTML Agility Pack
URL du blog http://www.csharpfr.com/code.aspx?ID=41034

signaler à un administrateur
Commentaire de sorcer1 le 26/03/2007 11:20:08

"le probleme c'est que ce composant charge la page et toutes les ressouces images, scripts...."
c'est pas vrai le composant WebBrowser ne charge pas les images, sauf si on l'utilise comme composant visuel!
ton html parser est vraiment plus leger et plus rapide de le WebBrowser en tout cas, par contre il ne gère les cookies et c'est bien dommage!
bravo quand même!

signaler à un administrateur
Commentaire de Zeroc00l le 14/08/2007 18:17:16

Au premier lancement j'ai oublié de regler mon firewall...
d'où une exception dans la clause finally de la fonction
"btnLoad_Click" !
la ligne "this._oHtmlDocument.Loading -= oLoadingEventHandler;"
provoque une NullReferenceException parce que "_oHtmlDocument" est à null.
Sinon sympa la source ... Ca m'évite d'avoir à faire une source pour reformater le code HTML d'une page :)

signaler à un administrateur
Commentaire de thiosyiasar le 15/08/2007 10:07:47

Salut Zeroc00l

Merci pour ton commentaire.

Cependant je pense que pour formater ton code html regarde plutot du coté du HtmlTextWriter qui est utilisé par ASP.net pour généré le rendu HTML

Ce code fait le contraire (il n'existe malheureusement pas  de HtmlTextReader...) enfin pas officiellement chez Microsoft

A+

signaler à un administrateur
Commentaire de Zeroc00l le 22/08/2007 02:12:31

Bon je viens d'utiliser réellement ta source cette fois ... et j'ai malheureusement de mauvaise nouvelles ... des bugs !

Si tu charges un fichier contenant : "<a><img/>Blablabla</a>"
Le Node qui correspond a "<a> ... </a>" a sa propriete "Value" à null et
le Node qui correspond a "<img/>" a sa propriete Value correspondant a "Blablabla".
Or si je ne m'abuse c'est le node "<a>" qui devrait contenir "Blablabla" !

Avec le code suivant : ""<a><b></b>Blablabla</a>" les deux nodes ont leur propriété "Value" à null, autrement dit "Blablabla" a disparu !

Pour l'instant ca ne m'a pas posé de problème sérieux.

Autrechose :
Quand ton parser tombe sur attribut genre href="..." il cree un HtmlAttribut. Ne devrait il pas enlever les double quotes de la valeur ? Les double quotes ne sont là que pour rendre l'xml plus lisible, il ne font pas parti de la valeur, donc d'après moi faudrait les virer ...

Bon ben bonne chance ! :)

P.S. : Merci pour l'info concernant le formatage de l'html

signaler à un administrateur
Commentaire de Zeroc00l le 22/08/2007 03:05:45

Oops y'a pas d'attribut "Value" pour les nodes .. je parlais de l'attribut "Tag.Value"
(d'ailleur j'ai mis Tag au pluriel dans tes sources !)

Quand je met l'URL d'un fichier qui n'est pas de l'HTML ça throw dans tous les sens !

signaler à un administrateur
Commentaire de thiosyiasar le 22/08/2007 17:48:05

Merci Zeroc00l pour ces tests ! ceux sont effectivement des bugs !

Je vais me libérer un peu de temps pour corriger ça !

A+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Question con? [ par SoyYo ] SalutJuste une question qui va peut etre vous paraitre un peu con!!En fait je fasi des recherches depuis quelques jours a propose d'un parseur HTML, e c# erreur introuvable [ par belette321 ] Voila j'ai des erreur dans mon code que j'arrive pas a corriger pouvais vous m'aider.Erreur:if (Packet.Length &gt;= 7 &amp;&amp; Packet.Substring(0, 5 chargement d(une page html à partir d'un controle [ par nehla ] salut j'ai crée une interface qui contient un menu parmi les items du menu j'ai un menu qui s'appelle aide je veux lorsque je clique sur cet item il s html entities [ par sh4gm4 ] Salut,j'ouvre un xml qui contient certains &lt; et &gt; encodé en html : &amp;lt; et &amp;gt;sample: &lt;tu changedate="20080807T140037Z" changeid="ad Fichier d'aide html compilé [ par olivierbalagizi ] Bonjour à tous,Je cherche à créer un fichier d'aide (Fichier Html compilé) mais je ne sais pas comment m'y prendre. Je sais créer le fichier html mais Pb d'affichage de code C# en HTML via un XML [ par jbhee ] Bonjour,J'ai un fichier XML avec des balises contenant du code en C#. ex : &lt;formula&gt;        private float Code_1()        {            if (Code_ Design Surface (mais pour le html) [ par veler ] Salut, Vous connaissez sûrement le Design Surface qui nous permet, en .Net, d'avoir le fameux concepteur de fenêtre, comme dans Visual Studio. Mais ma Visual Studio 2005 (C#) et champ HTML (<object><embed>) [ par yannickG187 ] Bonjour,Je développe une petite application sous Visual Studio 2005  et j'aimerais savoir si c'est possible (et alors comment ^^) de mettre du code HT envoi mail html [ par titi66 ] bonjour Dans une appli en c#, je dois envoyer une page html dans le corps d'un mail (pas en pièce jointe...) . Comment faire ?merci


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.