Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire des informations d' une page html

9 réponses
Avatar
LR
Salut,

J'ai besoin de pouvoir extraire des informations d'une page html. Je
rechercher un framework qui m'aiderait =E0 d=E9velopper l'outil dont j'ai
besoin.

Si je connais la structure de quelques pages html, je veux pouvoir
d=E9finir un "template" ou "masque" pour extraire la ou les informations
qui m'int=E9ressent.

Par exemple, si j'ai la page suivante :
<html>
<body>
<h1>Titre de la page</h1>
Texte repr=E9sentant le contenu de la page
</body>
</html>

je devrais pouvoir d=E9finir le masque suivant :
<html>
<body>
<h1>${titre_page}</h1>
${contenu_page}
</body>
</html>

Il me faudrait ensuite une fonction qui prenne en param=E8tre la page
html et le masque et retourne une Hashtable contenant chaque champs et
sa valeur.

Qu'en pensez-vous ?
Connaissez-vous qqch d'existant qui pourrait m'aider ?

Merci d'avance
Lilian

9 réponses

Avatar
TestMan
Bonjour,

Des requètes XPath devraient fonctionner, et si ton contenu n'est pas du
XML valide il te faudra utiliser à la place d'un parseur XML un des
http://java-source.net/open-source/html-parsers/java-html-parser

Celà te permetra de t'adapter facilement en cas de modification de la
structure de la page.

Si tu as beaucoup de pages à vampiriser dans le même style afin d'éviter
à faire trop de code, tu peux appliquer une feuille XSLT qui fera un
adapteur vers un flux XML plus clasique que tu pourras traiter de façon
uniforme quelque soit les sources. Un classique du genre Cocoon gére ça
trés bien ...

A+

TM

Salut,

J'ai besoin de pouvoir extraire des informations d'une page html. Je
rechercher un framework qui m'aiderait à développer l'outil dont j'ai
besoin.

Si je connais la structure de quelques pages html, je veux pouvoir
définir un "template" ou "masque" pour extraire la ou les informations
qui m'intéressent.

Par exemple, si j'ai la page suivante :
<html>
<body>
<h1>Titre de la page</h1>
Texte représentant le contenu de la page
</body>
</html>

je devrais pouvoir définir le masque suivant :
<html>
<body>
<h1>${titre_page}</h1>
${contenu_page}
</body>
</html>

Il me faudrait ensuite une fonction qui prenne en paramètre la page
html et le masque et retourne une Hashtable contenant chaque champs et
sa valeur.

Qu'en pensez-vous ?
Connaissez-vous qqch d'existant qui pourrait m'aider ?

Merci d'avance
Lilian



Avatar
LR
Merci pour ta réponse,

le contenu HTML ne sera surement pas standard et je doute donc que les
requêts XPath fassent l'affaire.

En revanche, les feuilles XSLT sont peut-être la solution, même si je
n'ai jamais utilisé ça. Aurais-tu ou pourrais-tu me diriger vers un
exemple plus ou moins proche de ce que je veux faire ?

Merci pour ton aide
Lilian
Avatar
jlp
"LR" a écrit dans le message de
news:
Merci pour ta réponse,

le contenu HTML ne sera surement pas standard et je doute donc que les
requêts XPath fassent l'affaire.

En revanche, les feuilles XSLT sont peut-être la solution, même si je
n'ai jamais utilisé ça. Aurais-tu ou pourrais-tu me diriger vers un
exemple plus ou moins proche de ce que je veux faire ?

Merci pour ton aide
Lilian

Pour utiliser XSLT, il faut que le fichier HTML soit en fait XHTML , c'est à
dire "valide" au sens XML avec des tags d'ouvertures et des tags de
fermetures ou des tags vides.
par exemple :
<br>
<br>
est non valide

<br/>
<br> </br>
est valide...
Avatar
LR
Ce n'est donc surement pas la solution.

Mais alors comment faire ? Quelqu'un a une idée ?

Je vais peut-être devoir me résoudre à le faire moi mais je ne sais
pas encore comment.
Avatar
David JOURAND
Bonjour,

Mais alors comment faire ? Quelqu'un a une idée ?


Passe d'abord le HTML à jtidy (jtidy.sourceforge.net) qui se fera un
plaisir de le transformer en XHTML, c'est à dire en un document XML
valide !

--
David Jourand

Avatar
Jacques-Olivier Haenni
Bonjour,

La piste du XML me paraît bien compliquée et potentiellement bien
hasardeuse...

Avez-vous regardé du côté de frameworks tels que htmlunit
(http://htmlunit.sourceforge.net/; exemple de parcours d'un tableau:
http://htmlunit.sourceforge.net/table-howto.html) ou httpunit
(http://httpunit.sourceforge.net/) ? Ils offrent entre autres des
méthodes permettant d'accéder au contenu d'une page HTML de manière très
aisée.

Un des buts premiers de ces frameworks est d'offrir du support pour des
tests unitaires d'application Web, mais ils peuvent très bien servir à
accéder au contenu de pages web en général.

Une autre solution consiste à utiliser des expressions régulières pour
extraire certaines informations de la page HTML. Dans certains cas, ça
peut s'avérer un bon choix.

Jacques-Olivier



David JOURAND wrote:
Bonjour,

Mais alors comment faire ? Quelqu'un a une idée ?


Passe d'abord le HTML à jtidy (jtidy.sourceforge.net) qui se fera un
plaisir de le transformer en XHTML, c'est à dire en un document XML
valide !




Avatar
David JOURAND
Bonjour,


La piste du XML me paraît bien compliquée et potentiellement bien
hasardeuse...


Je ne trouve pas que parser le XHTML avec une classe implémentant
l'interface org.xml.sax.ContentHandler soit compliqué.


Un des buts premiers de ces frameworks est d'offrir du support pour des
tests unitaires d'application Web, mais ils peuvent très bien servir à
accéder au contenu de pages web en général.


Effectivement ! Mais je ne pense pas que cela soit beaucoup plus simple
qu'un parser SAX... Cela dépend certainement du contenu de la page.


Une autre solution consiste à utiliser des expressions régulières pour
extraire certaines informations de la page HTML. Dans certains cas, ça
peut s'avérer un bon choix.


Délicat...

--
David Jourand

Avatar
LR
Il faut que je me penche sur les frameworks de tests unitaires, ça
correspond effectivement en partie à ce que je veux faire.

D'un autre coté, l'utilisation de XHTML après traitement par JTidy me
paraît bonne aussi. Il faut que je vérifie que JTidy est vraiment
capable de transformer de manière fiable un contenu html en xhtml,
sans erreur et sans perte d'information.

Merci pour ces suggestions.
Avatar
TestMan
Bonjour,

Et alors ou est le problème ?
C'est pour celà que dans le lien que je t'ai passé il y a des parser qui
peuvent lire des truc gore (comme jtidy), il savent même lire du code
aussi mauvais que le HTML généré par office (sombre mixture infame à ne
pas ouvrir) ;-)

Et si tu veux faire du XSLT il te faudra de toute façon un parseur XML
qui soir compatible avec du HTML "pourrit" donc tu retombe sur le même
problème dont je t'ai déjà donné une solution dans la paragraphe
précédent ;-)

A+

TM

Merci pour ta réponse,

le contenu HTML ne sera surement pas standard et je doute donc que les
requêts XPath fassent l'affaire.

En revanche, les feuilles XSLT sont peut-être la solution, même si je
n'ai jamais utilisé ça. Aurais-tu ou pourrais-tu me diriger vers un
exemple plus ou moins proche de ce que je veux faire ?

Merci pour ton aide
Lilian