[C++]parser HTML

Salut les gens,
Pour un projet perso, je cherche à parser du HTML, idéalement en C++ et sous windows…
Y a bien tous les parsers XML, mais ca marche pas pour le gros HTML des familles (style les balises link qui sont jamais fermées…), alors si vous avez d’autres idées…

A la limite, si c’est vraiment simplissime en C#, je suis prêt à changer de langage.

C’est pas tres clair ce que tu essayes de faire, ni dans quel but. Tu veux faire un parser qui te construits un arbre ? ou un parser qui va te generer au tre chose a partir du resultat du parsing ? bref, developpes un peu. Mais globalement, l’idée, et ce quelque soit le langage (C++ ou C#) tu lit ton fichier (ou ton flux si tu recuperes une page html), tu le mets dans une string, et tu parses a l’aide de switch / if, et de strcmp en c++, ou String.Compare en C#. (Et si tu pouvais developper aussi tes contraintes de langages, on pourrait t’aider plus precisement, sur le langage de ton choix.)

Tiens, marrant, le premier lien sur : how to build a html parser in c++ me donnes ca : http://www.csharpfr.com/codes/PARSER-HTML_41034.aspx (un code c++ maj en C# B))

Ce que je veux, en fait, c’est un parser XML qui soit un peu laxiste.
Tu lui files un fichier, et il te sort un arbre (parser SAX ou DOM, je suis pas difficile)
Le problème, c’est que le HTML est super plus difficile à parser que le XML, donc autant un parser XML ca se trouve partout, autantpour le HTML…
Donc je voulais savoir si il y avait une bibliothèque “standard” de parsing HTML. A priori, non B)

En tout cas merci pour ton lien,je vais tester ça…

T’as regardé du côté des sources de firefox ?

Heuuu et par exemple integrer IE a ton prog comme composant pour parser le truc et recuperer le CodeDom non? T’as meme pas besoin d’utiliser le moteur de rendu, juste le parser->codedom. C’est quand meme le plus simple… re-ecrire le parser de zero, c’est juste un truc de mega dingue (du genre plusieurs dizaines d’annees homme) avec tous les cas possibles, surtout si tu veux qu’il soit vaguement laxiste.

Salut!

J’utilise c# et il y a à mon avis 2 bibliothèques qui pourraient t’être utiles:

1/ HtmlAgilityPack: http://www.codeplex.com/htmlagilitypack/
Je l’utilise dès que je dois parser une page web. Tout n’est pas totalement au point, mais ca me sauve souvent de pas mal de prises de tête.
Petit exemple de code:

//On charge le code html
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
doc.OptionOutputAsXml = true;

//Et on le recrache en XML
XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.LoadXml(doc.DocumentNode.WriteTo());

2/ NTidy: http://sourceforge.net/projects/ntidy/ en c#
ou alors la version en c: http://tidy.sourceforge.net/

J’espère que ça pourra t’aider.