Parser HTML

jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008 - 1 mars 2007 à 14:13
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008 - 5 mars 2007 à 14:36
Bonjour,

 je voudrais parser un fichier HTML. Comme le HTML provient du meme langage que le XML, j'ai utiliser un parser SAX. Mais la page HTML doit être validée XHTML sinon le parseur plante .

Personne n'a une petite idée pour arriver à parser un fichier HTML ? ( et même pour un fichier non valide XHTML). Le parser Sax est-il la meilleure solution ?

A oui, j'aimerai ne pas importer d'autres librairies, mais si il n'y as pas le choix, je ferrais avec !

Merci

16 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
1 mars 2007 à 16:10
Salut,

Je fais pas mal de parsing en ce moment (xml et html).
J'ai abandonné SAX a cause de plusieurs problèmes auxquels je n'ai pas trouvé de solution :
- html non valide,
- reprise de connexion après reinitialisation par le serveur non controlable avec le couple SAX/Apache.

J'utilise plutôt une forme de parsing "plat" à l'aide d'expressions régulières.
Pour le xml, ça passe généralement bien.
Pour le html, c'est plus sportif. Ma méthode :
- Ouverture de la page dans firebug
- Recherche de balises potables qui peuvent servir d'accroche aux ER
- Quand les balises ne passent pas, accroche sur du texte propre à la page
- Construction d'une série d'ER me permettant d'extraire les données dont j'ai besoin
- Parsing.

Si ça peut t'aider...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
1 mars 2007 à 21:53
Salut:

Jettes un coup d'oeil sur la classe javax.swing.text.html elle permet de parser un fichier HTML.




Pour SAX je ne sais pas que ça va vraimant servir pour parser un fichier HTML tout simplement parceque:



HTML n'est pas assez rigoureux comme XML



Il y a des balises HTML qui n'admettent pas des balises de fin (</>) prend l'exemple de la balise img.




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 07:07
Ta méthode AlexN parait un peu barbare lol

Je vais jeter un coup d'oeil sur la classe HTML. Je vais bien voir ce que sa donne. Donc en gros j'abandonne mon parserSax ...

Merci à vous deux
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 mars 2007 à 10:39
:o) nan nan pas barbare, juste ultralight.Mes parsers peuvent être utilisé simultanément par un paquet d'internautes. Par conséquent des clients prégénérés du type wsdl ou des classes swing sont trop lourdes et mobilisent trop de ressources pour mes besoins.
Je n'utilise que deux paquetages basiques : java.util.regex.Pattern et java.util.regex.Matcher. Le reste est fait à la mano.
Maintenant si tu n'as besoin que de parser qu'une page de temps en temps, swing est surement une bonne solution.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 10:45
"Je n'utilise que deux paquetages basiques : java.util.regex.Pattern et java.util.regex.Matcher."

J'étais juste en train de me renseigner la dessus, j'ai d'ailleur commencer, mais les expressions régulières, je ne maitrise pas trop. D'ailleurs si quelqu'un pourrait m'aider, par exemple pour que le matcher me renvoie une chaine contenant la balise et son contenu, comme par exemple :

[... ... ]

Mais aussi les balises comme celle ci :

Je cherche je cherche et je galère !

Merci
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 mars 2007 à 11:03
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 11:14
Merci pour le lien, j'ai regardé ... et c'est toujours flou .. j'ai lu des tutos explicant mais non, rien à faire...
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 11:24
Je viens de réussir à récupérer le contenu des balises :

Pattern pat = Pattern.compile("<html.*>*</html>",Pattern.DOTALL | Pattern.MULTILINE);

Mais j'aimerais savoir si on peut adapter le pattern les balises ?
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 11:27
En fait sa reviendrait à faire une seule ligne avec :

Pattern pat = Pattern.compile("",Pattern.DOTALL | Pattern.MULTILINE);

Pattern pat = Pattern.compile("<html.*>*</html>",Pattern.DOTALL | Pattern.MULTILINE);

Sa peut se faire non ?
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 mars 2007 à 11:33
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class PatternExample{
    public static void main(String[] args){
        String s = "      ";
        Matcher m = Pattern.compile("^$").matcher(s.trim());
        if (m.find()) {
            System.out.println("Trouve = " + m.group(1));
        }
    }
}

Affiche :
Trouve = img.jpg
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 mars 2007 à 11:39
Tes motifs sont très généraux, et les options pattern.DOTALL et pattern.MULTILINE sont dangereuses dans le sens où le résultat risque d'être le fichier entier.
d'autre part avec <html.*>*</html>, une expression comme
<htmllllllllllllllllllllllllllllet autre chose>>>>>>>>>>>>>>>>>>>></html>
correspond aussi à ton motif.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 mars 2007 à 11:42
sinon regardes dans l'aide de l'api http://java.sun.com/j2se/1.5.0/docs/api/
classe pattern, la syntaxe est détaillée
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 11:47
Euh pour les motifs j'avai vu sur le net, et comme cela fonctionnait  lol j'ai laissé. Parce que si je voulais récupérer le contenu de la balise HTML, il me faut passer les lignes.

Ton exemple ne marche pas pour mon fichier html très basique

<html lang="fr">
    <head> <title>Hello World </title> </head>
   
        Hello World !
        Google
       
   
</html>

Pfiou sacrées Expressions....
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
2 mars 2007 à 12:00
J'arrive à un truc pas mal, mais avec deux patterns, mais je viens de tester avec un balise titleee, va falloir que je vois, sachant qu'il y a 3 sortes de balises <title>
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
2 mars 2007 à 18:37
http://java.sun.com/products/jfc/tsc/articles/bookmarks/




http://www.eteks.com/tips/tip6.html



__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler .../FONT>
0
jeanphi6 Messages postés 33 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 24 juillet 2008
5 mars 2007 à 14:36
Je l'ai ai déja parcourue ces pages ;) Mais merci quand meme :)
0
Rejoignez-nous