Jump to content

[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!

Edited by Kricek
Link to comment
Share on other 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 :)

Link to comment
Share on other 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...

Link to comment
Share on other 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...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...