2009-08-17 6 views
1

Je dois extraire des données d'une page html en utilisant du code Java. La partie Java est requise.Lit la table html en java

La page sur laquelle j'essaie d'extraire des informations est http://www.weather.gov/data/obhistory/KMCI.html .

J'ai besoin de créer une liste de hashmaps ... ou un type d'objet de données que je peux référencer dans un code ultérieur.

Ceci est tout ce que j'ai jusqu'à présent:

URL weatherDataKC = new URL("http://www.weather.gov/data/obhistory/KMCI.html"); 
InputStream is = weatherDataKC.openStream(); 
int cnt = 0; 
StringBuffer buffer = new StringBuffer(); 

while ((cnt = is.read()) != -1){ 
    buffer.append((char) cnt); 
} 

System.out.print(buffer.toString()); 

Toutes les suggestions où commencer?

Répondre

1

J2SE inclut des capacités d'analyse HTML, dans les packages javax.swing.text.html et javax.swing.text.html.parser. HTMLEditorKit.ParserCallback reçoit les événements poussés par DocumentParser (mieux être utilisé par ParserDelegator). Le framework est très similaire aux analyseurs syntaxiques SAX pour XML.

Attention, il y a quelques bugs. Il ne sera pas capable de gérer très bien le mauvais HTML.


La gestion de colspan et rowspan est votre affaire.

+0

Merci, cela semble être un bon point de départ. Et, bien que le CyberNeko semble intéressant, j'espérais rester dans les bibliothèques que nous utilisons déjà. – aintnoprophet

3

il y a un analyseur agréable HTML appelé Neko:

NekoHTML est un scanner HTML simple et équilibreur de balise qui permet aux programmeurs d'applications pour analyser les documents HTML et accéder aux informations en utilisant des interfaces XML standard. L'analyseur peut analyser les fichiers HTML et «réparer» de nombreuses erreurs courantes que les auteurs humains (et informatiques) font en écrivant des documents HTML. NekoHTML ajoute des éléments parents manquants; ferme automatiquement les éléments avec des étiquettes de fin facultatives; et peut gérer des balises d'éléments en ligne incompatibles.

More information here.

0

Le grattage HTML est notoirement difficile, sauf si vous avez beaucoup de "hooks" comme ID uniques. Par exemple, la table que vous voulez commencer avec ce code HTML:

<table cellspacing="3" cellpadding="2" border="0" width="670"> 

... qui est très générique et peut correspondre à plusieurs tableaux sur la page. L'autre problème est, que se passe-t-il si la structure HTML change? Vous devrez redéfinir toutes vos règles d'analyse ...

+0

Excellent point, mais il semble que ce soit des devoirs, donc peu importe si cela change plus tard. ;] – CPerkins