Comment analyser le tableau HTML à l'aide de jsoup?
Je suis en train d'analyser HTML à l'aide de jsoup. C'est ma première fois de travailler avec jsoup et j'ai lu un tutoriel sur elle ainsi. Ci-dessous mon tableau HTML qui je suis en train d'analyser -
Si vous voyez mon tableau ci-dessous, il y a trois tr
dès maintenant (j'ai la raccourcir pour avoir trois lignes de la table juste pour comprendre le but, mais en général, il sera plus). Maintenant, je voudrais extraire Cluster Name
de mon tableau ci-dessous et il est correspondant host name
ainsi, par exemple, - je voudrais extraire Titan
comme le nom du cluster et l'ensemble de son nom d'hôte, dont l'état sont en baisse.
Comme vous pouvez le voir ci-dessous pour Titan
nom du cluster, j'ai deux noms d'hôtes machineA.abc.com
et machineB.abc.com
dans lequel machineA
statut est up
mais machineB
statut est down
.
Je vais donc imprimer Titan
comme nom de cluster et imprimer machineB.abc.com
que le nom d'hôte, car il est en panne. Est-ce possible de le faire à l'aide de jsoup?
<table border=1>
<tr>
<td> </td>
<td> </td>
<td>Alert</td>
<td>Cluster Name</td>
<td>IP addr</td>
<td>Host Name</td>
<td>Type</td>
<td>Status</td>
<td>Free</td>
<td>Version</td>
<td>Restart Time</td>
<td>UpTime(Days)</td>
<td>Last probed</td>
<td>Last up</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td>Titan</td>
<td>10.100.111.77</td>
<td>machineA.abc.com</td>
<td></td>
<td bgcolor="ffffff">up</td>
<td bgcolor="ffffff" align=right>88%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 01:49:08,220</td>
<td bgcolor="ffffff" align=right>381</td>
<td>07-14 20:01:59</td>
<td>07-14 20:01:59</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td></td>
<td>10.200.192.99</td>
<td>machineB.abc.com</td>
<td></td>
<td bgcolor="ffffff">down</td>
<td bgcolor="ffffff" align=right>85%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 01:52:20,613</td>
<td bgcolor="ffffff" align=right>103</td>
<td>07-14 20:01:59</td>
<td>07-14 20:01:59</td>
</tr>
</table>
Jusqu'à présent, je suis capable d'extraire l'ensemble du tableau HTML à l'aide de jsoup mais vous ne savez pas comment faire pour en extraire du nom du cluster et les noms d'hôte bas -
URL url = new URL("url_name");
Document doc = Jsoup.parse(url, 3000);
Mise à jour:-
Je pourrais avoir deux nom de cluster dans le tableau comme indiqué ci-dessous -
<table border=1>
<tr>
<td> </td>
<td> </td>
<td>Alert</td>
<td>Cluster Name</td>
<td>IP addr</td>
<td>Host Name</td>
<td>Type</td>
<td>Status</td>
<td>Free</td>
<td>Version</td>
<td>Restart Time</td>
<td>UpTime(Days)</td>
<td>Last probed</td>
<td>Last up</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td>Titan</td>
<td>10.100.111.77</td>
<td>machineA.abc.com</td>
<td></td>
<td bgcolor="ffffff">up</td>
<td bgcolor="ffffff" align=right>88%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 01:49:08,220</td>
<td bgcolor="ffffff" align=right>381</td>
<td>07-14 20:01:59</td>
<td>07-14 20:01:59</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td></td>
<td>10.200.192.99</td>
<td>machineB.abc.com</td>
<td></td>
<td bgcolor="ffffff">down</td>
<td bgcolor="ffffff" align=right>85%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 01:52:20,613</td>
<td bgcolor="ffffff" align=right>103</td>
<td>07-14 20:01:59</td>
<td>07-14 20:01:59</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td>Goldy</td>
<td>10.100.111.77</td>
<td>machineH.pqr.com</td>
<td></td>
<td bgcolor="ffffff">up</td>
<td bgcolor="ffffff" align=right>88%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 01:49:08,220</td>
<td bgcolor="ffffff" align=right>381</td>
<td>07-14 20:01:59</td>
<td>07-14 20:01:59</td>
</tr>
</table>
Maintenant, si vous voyez ci-dessus, j'ai deux nom de cluster est Titan
et d'autres est Goldy
donc je veux trouver toutes les machines qui sont à la baisse pour Titan
nom du cluster seulement.
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible avec JSoup. Tout d'abord, vous sélectionnez la table. Ensuite, vous sélectionnez le
<tr>
balises pour les lignes. Vous pouvez commencer à partir de la deuxième indice depuis la première ligne ne contient que les noms de colonne. Alors en boucle sur la<th>
balises et d'obtenir l'indice spécifique. Dans votre cas, l'index 7 et 5 sont important(indice 7: Statut, indice 5: Nom de l'Hôte). Vérifier l'état s'il est égal àdown
et si elle l'est, puis ajouter le Nom d'Hôte à une liste. C'est tout.Mise à jour:
Lorsque vous trouvez un mot,
Titan
vous pouvez créer une autre boucle et de regarder si le nom du cluster est vide.Edit: - je changer la
while
boucle àdo while
boucle.downServers ArrayList contient la liste des serveurs de noms d'hôtes.
Titan
nom du cluster. Est-ce que ça ira?Ce que je ferais dans ton cas est d'abord créer un Objet de votre machine avec tous les winrar attributs. Ensuite, à l'aide de Jsoup je voudrais extraire les données et de créer une liste de tableaux, puis utiliser la logique pour obtenir des données à partir de la liste de tableaux.
Je suis ignorant la création de l'Objet (puisqu'il n'est pas la question ici) et je vous le nom de l'Objet comme
Machine
Puis à l'aide de Jsoup, je voudrais obtenir les données de ligne comme ceci:
Puis utiliser une boucle pour obtenir les valeurs que vous avez besoin de la liste:
C'est tout. Veuillez également noter que ce code n'est pas testé et peut contenir quelques erreurs de syntaxe, comme il est écrit directement sur cet éditeur, et non pas dans un IDE.