Aller au contenu

[Résolu] Parsing HTML


Kricek

Recommended Posts

Coucou tout le monde!

Je recherche des infos sur le parseur SAX (Google est mon ami ^^) lorsqu'il est utilisé pour parser du HTML.

Je vous arrête tout de suite, je suis dessus depuis plusieurs jours et je pense avoir écumé les sites et forums traitant du sujet.

Mon problème est le suivant: Le parseur SAX est génial pour du XML, et pour du HTML TRES bien codé. Seulement voilà, le HTML que je récupère, visiblement, ne fait pas partie de cette catégorie. Et le hic, c'est que je n'ai pas accès au code source HTML. Du coup, à chaque fois qu'il rencontre un souci, le parseur s’interrompt et je me retrouve avec un array list d'objets vide (il y a un souci quasiment dès le début du document HTML)...

Auparavant, je prenais directement le code HTML que je stockais dans une String puis je me débrouillais avec des substrings... Mais forcément, ça plantait dès qu'il y avait un caractère de décalage ou autres...

Enfin, j'ai regardé du coté du DOM mais ça ne colle pas à ce que je voudrais faire.

Bref, si quelqu'un avait quelques tuyaux sur comment parser du HTML avec SAX (ou un autre parseur, peu importe), un coup de main serait le bienvenu... :)

Edit : Résolu. Il suffit de télécharger et d'installer le jar de tagsoup, de l'ajouter dans le buildpath. Ensuite, au lieu d'utiliser une instance de SAXParser, j'utilise une instance de "org.ccil.cowan.tagsoup.Parser" et cela fonctionne... Merci à Picogon!

Modifié par Kricek
Lien vers le commentaire
Partager sur d’autres sites

Bingo, même problème que moi il y a quelques semaines, des balises doubles, des balises pas fermées, des attributs en double ...

=> http://home.ccil.org/~cowan/tagsoup/

(Download the TagSoup 1.2.1 jar file here. It's about 89K long.)

Et voià, tu passe un coup de tagsoup avant de parser ton html et c'est nowel :)

Par contre, si tu trouve la même chose pour parser en dom je prend !

Enjoy :)

Lien vers le commentaire
Partager sur d’autres sites

Bon, je dois m'y prendre comme un pied mais je n'arrive pas à l'implémenter...

Voici ce que j'avais au départ:

...
//Ici, je récupère l'InputStream de la page Web que je veux parser
InputStream is = httpConn.getInputStream();
//parseur est une instance de SAXParser et handler, une instance de ma classe MyXMLHandler, dans laquelle j'ai mes méthodes "startElement", etc...
parseur.parse(is, handler);
ArrayList<Chapters> chaptersList = ((MyXMLHandler) handler).getBatimentsList();
...

Je pense avoir compris que je devais instancier un "org.ccil.cowan.tagsoup.Parser" à la place de mon SAXParser. Mais je n'arrive pas à m'en dépatouiller...

Lien vers le commentaire
Partager sur d’autres sites

Question subsidiaire :

Dans le code HTML suivant:

<span class="level">
    <span class="textlabel">Toto</span>
    5
</span>

Est-ce que quelqu'un aurait une idée de comment coder mon handler pour récupérer le chiffre? A quel moment? Sachant que le tag intérieur ne m'intéresse pas...

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...