begin process at 2010 02 10 05:05:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > PARSER HTML

PARSER HTML


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :14 998 / 1 123

Auteur : thiosyiasar

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (17)
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

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


 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

 Sources du même auteur

Source .NET (Dotnet) COMPILATION ET RÉFLECTION
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION BASE DE CONNAISSANCE / CONCEPTION 3 TIERS
Source avec Zip Source .NET (Dotnet) GÉNÉRATEUR DE DOCUMENTATION (LIB POUR RÉFLECTION ET XMLDOC)
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE SCRIPT SQL DE DONNÉES
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORATEUR D'ASSEMBLY DANS UN TREEVIEW

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) HTTP FLOOD STRESS TEST par NightMareLmW
Source avec Zip Source avec une capture Source .NET (Dotnet) SERVEUR/ESCLAVE MODBUS TCP/IP par SteveFuchsIT
Source avec Zip Source avec une capture Source .NET (Dotnet) IPHELPER - PORTS TCP/UDP, TABLES DE ROUTAGE/ARP + FONCTIONS ... par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET3.5] SYSTEM.IO.PIPES - UTILISATION D'UN CANAL NOMMÉ par Willi
Source avec Zip Source .NET (Dotnet) MESSAGES PERSOS MSN par XelectroX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SCRUTER UNE PAGE WEB À LA RECHERCHE DES LIENS ET DES ADRESSE... par developper_man
Source avec Zip Source avec une capture Source .NET (Dotnet) PARSEUR HTML par Yxion
Source avec Zip Source avec une capture Source .NET (Dotnet) CS2GENLINQTOXML - XML + XPATH VISUALIZER + LINQ TO XML GENE... par romagny13
Source avec Zip Source avec une capture Source .NET (Dotnet) TRANSFORMATION D'UN XML À L'AIDE DE XSLT VERS HTML par EMSIEN
Source .NET (Dotnet) RÉCUPÉRATION DE TAGS MP3 par Moomoon07

Commentaires et avis

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

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




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.

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

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)


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

Commentaire de thiosyiasar le 12/02/2007 03:25:03

Salut FremyCompany,

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

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

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!

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

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+

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

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 !

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+

Commentaire de brlecler le 13/02/2009 11:09:39

Il y a plus largement, un problème sur les objets (les tags) imbriqués les uns dans les autres. Normalement c'est le genre de problème qui doit se traiter par la récursivité. Mais étant donné que par ailleurs ce code fonctionne bien, voici un correctif qui permet de bien traiter des imbrications du genre:
<div><span><b>BBB</b><strong>SSS</strong>SPSPSP</span>DIDIDI</div>

Dans le fichier HtmlDocument déclarer la classe:

        class TagLie
        {
            public CB_HtmlTag Tag;
            public TagLie Parent;
        }

Dans la méthode HtmlDocument:extracttags

dans le case '<' remplacer :

if (oTags.Count > 0)
oTags[oTags.Count - 1].Value = oValue;

par

TagActif.Tag.Value = oValue;

dans le case '>' , après la ligne oTags.Add(t); ajouter le bloc :

TagLie Nouveau = new TagLie();
Nouveau.Tag = t;
if (t.IsCloseTag)
{
  TagActif = TagActif.Parent;
}
else
{
  Nouveau.Parent = TagActif;
  TagActif = Nouveau;
}

Et ça va fonctionner beaucoup mieux...

Commentaire de thiosyiasar le 13/02/2009 12:58:45

Merci brlecler

Je vais me bloquer un peu de temps pour corriger tout ca et intégrer ton correctif.

A+

Commentaire de Mathrb le 13/03/2009 00:55:24 10/10

Merci
C'est ce que je cherchais

 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 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 Récupérer une adresse IP dans une page HTML [ par r4z3r ] Bonjour à tous,J'ai fais un programme pour renouveller l'ip de ma livebox sans le reboot éléctrique (avec un cgi ) , mais j'aimerais maintenant ajoute Regexp: optimiser un parser [ par bubbathemaster ] Bonjour, j'écris un parser de log et l'algorithme a cette forme:if(monRegexp1.IsMatch(ligne)){    Match match = monRegexp1.match(line);    //traitemen Html et label ou autres [ par tigroux ] Salut quelqu'un sait comment faire pour que un label, un textbox ou autre puisse traiter du html.En gors je veux pouvoir faire &lt;b&gt;Coucou&lt;/b&g Parser de XML [ par bubbathemaster ] Bonjour,Je recherche un parser de XML simple capable de lire node par node un fichier.En effet, je dois travailler avec des fichiers XML pas toujours Lecture de TAG de fichiers mp3 [ par CatRom ] Bonjour,Depuis peu je me suis mis à la programmation en C#, je tente ( le mot est bien choisie ) de realiser un programme qui va renommer des fichiers Tag ID3v2 [ par maitranquille ] Salut,Je suis à la recherche d'une librairie qui permettrait d'écrire les tags ID3v2, surtout concernant les paroles, les autres m'importe peu.J'ai be traitement d'un fichier html [ par morad_smi ] bonjour chers developpeurs je voudrais un truc qui puisse m'aider pour le traitement d'un fichier html (ouverture, extraction du contenu ( texte, imag


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,920 sec (4)

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