Извлечение данных из HTML-страницы между тегами с помощью HTMLUNIT

Я пытаюсь извлечь данные с веб-страницы с помощью Html Unit. Я уже добился этого, преобразовав HtmlPage в текст, а затем извлек данные с помощью регулярного выражения из этой HTML-страницы. Мне также удалось извлечь данные из таблиц Html, используя атрибут класса в Html.

Я хочу снова полностью использовать HtmlUnit для всего извлечения, чтобы научиться тому же требованию, которое я выполнял с помощью регулярного выражения. Не могу понять, как извлечь данные в тегах в виде пары ключ-значение.

Вот образец данных Html

<div class = "top_red_bar">
    <div id = "site-breadcrumbs">
        <a href = "/admin/index.jsp" title = "Home">Home</a>
        &#124;
        <a href = "/admin/queues.jsp" title = "Queues">Queues</a>
        &#124;
        <a href = "/admin/topics.jsp" title = "Topics">Topics</a>
        &#124;
        <a href = "/admin/subscribers.jsp" title = "Subscribers">Subscribers</a>
        &#124;
        <a href = "/admin/connections.jsp" title = "Connections">Connections</a>
        &#124;
        <a href = "/admin/network.jsp" title = "Network">Network</a>
        &#124;
         <a href = "/admin/scheduled.jsp" title = "Scheduled">Scheduled</a>
        &#124;
        <a href = "/admin/send.jsp"
           title = "Send">Send</a>
    </div>
    <div id = "site-quicklinks"><P>
        <a href = "http://activemq.apache.org/support.html"
           title = "Get help and support using Apache ActiveMQ">Support</a></p>
    </div>
</div>

<table border = "0">
<tbody>
    <tr>
        <td valign = "top" width = "100%" style = "overflow:hidden;">
            <div class = "body-content">


<h2>Welcome!</h2>

<p>
Welcome to the Apache ActiveMQ Console of <b>localhost</b> (ID:TOOLCONTROLPJX526-524666-65544585445-2:3)
</p>

<p>
You can find more information about Apache ActiveMQ on the <a href = "http://activemq.apache.org/">Apache ActiveMQ Site</a>
</p>

<h2>Broker</h2>


<table>
    <tr>
        <td>Name</td>
        <td><b>localhost</b></td>
    </tr>
    <tr>
        <td>Version</td>
        <td><b>5.13.3</b></td>
    </tr>
    <tr>
        <td>ID</td>
        <td><b>ID:TOOLCONTROLPJX526-524666-65544585445-2:3</b></td>
    </tr>
    <tr>
        <td>Uptime</td>
        <td><b>17 days 13 hours</b></td>
    </tr>
    <tr>
        <td>Store percent used</td>
        <td><b>19</b></td>
    </tr>
    <tr>
        <td>Memory percent used</td>
        <td><b>0</b></td>
    </tr>
    <tr>
        <td>Temp percent used</td>
        <td><b>0</b></td>
    </tr>
</table>

Я хочу извлечь данные между тегами таблицы. Ожидаемый результат

Name:localhost
Version:5.13.3
ID:ID:TOOLCONTROLPJX526-524666-65544585445-2:3
Uptime:7 days 13 hours
Store percent used:19
Memory percent used:0
Temp percent used:0

Как этого добиться? Я хочу знать, какие методы следует использовать в модуле HTLM для достижения этой цели.

@Rcordoval, не думай слишком много ... Я здесь не для готового кода, а для конкретной идеи извлечения внутри тегов с использованием модуля Html. Если вы видите мой вопрос, я уже использовал другой метод (регулярное выражение), но не смог найти или понять Htmlunit для этого ...!

Elena 24.06.2018 08:35

вы можете найти много примеров здесь dzone.com/articles/htmlunit-%E2%80%93-quick-introduction

Arya 24.06.2018 08:45

HtmlUnit имеет множество методов (в HtmlPage) для получения элементов (по имени тега, идентификатору, пути и т. д.). Если элемент является таблицей, возвращается HtmlTable. И в HtmlTable есть методы для получения строк, а в строках есть методы для получения ячеек. Javadoc - ваш друг Прочтите это.

JB Nizet 24.06.2018 08:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
511
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это шаги, которые я выполнил (не единственное решение)

  1. проанализировать строку с помощью метода parseHtml с фиктивным URL-адресом
  2. получить вторую таблицу по xpath
  3. итерация с двойным вложенным циклом (для итератора - для правильного добавления разделителя-)

ExtractTableData:

import java.net.URL;

import com.gargoylesoftware.htmlunit.StringWebResponse;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HTMLParser;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow.CellIterator;


public class ExtractTableData {

    public static void main(String[] args) throws Exception {

        String html = "<div class=\"top_red_bar\">\n" + "                        <div id=\"site-breadcrumbs\">\n"
                + "                            <a href=\"/admin/index.jsp\" title=\"Home\">Home</a>\n"
                + "                            &#124;\n"
                + "                            <a href=\"/admin/queues.jsp\" title=\"Queues\">Queues</a>\n"
                + "                            &#124;\n"
                + "                            <a href=\"/admin/topics.jsp\" title=\"Topics\">Topics</a>\n"
                + "                            &#124;\n"
                + "                            <a href=\"/admin/subscribers.jsp\" title=\"Subscribers\">Subscribers</a>\n"
                + "                            &#124;\n"
                + "                            <a href=\"/admin/connections.jsp\" title=\"Connections\">Connections</a>\n"
                + "                            &#124;\n"
                + "                            <a href=\"/admin/network.jsp\" title=\"Network\">Network</a>\n"
                + "                            &#124;\n"
                + "                             <a href=\"/admin/scheduled.jsp\" title=\"Scheduled\">Scheduled</a>\n"
                + "                            &#124;\n" + "                            <a href=\"/admin/send.jsp\"\n"
                + "                               title=\"Send\">Send</a>\n" + "                        </div>\n"
                + "                        <div id=\"site-quicklinks\"><P>\n"
                + "                            <a href=\"http://activemq.apache.org/support.html\"\n"
                + "                               title=\"Get help and support using Apache ActiveMQ\">Support</a></p>\n"
                + "                        </div>\n" + "                    </div>\n" + "\n"
                + "                    <table border=\"0\">\n" + "                        <tbody>\n"
                + "                            <tr>\n"
                + "                                <td valign=\"top\" width=\"100%\" style=\"overflow:hidden;\">\n"
                + "                                    <div class=\"body-content\">\n" + "\n" + "\n"
                + "<h2>Welcome!</h2>\n" + "\n" + "<p>\n"
                + "Welcome to the Apache ActiveMQ Console of <b>localhost</b> (ID:TOOLCONTROLPJX526-524666-65544585445-2:3)\n"
                + "</p>\n" + "\n" + "<p>\n"
                + "You can find more information about Apache ActiveMQ on the <a href=\"http://activemq.apache.org/\">Apache ActiveMQ Site</a>\n"
                + "</p>\n" + "\n" + "<h2>Broker</h2>\n" + "\n" + "\n" + "<table>\n" + "    <tr>\n"
                + "        <td>Name</td>\n" + "        <td><b>localhost</b></td>\n" + "    </tr>\n" + "    <tr>\n"
                + "        <td>Version</td>\n" + "        <td><b>5.13.3</b></td>\n" + "    </tr>\n" + "    <tr>\n"
                + "        <td>ID</td>\n" + "        <td><b>ID:TOOLCONTROLPJX526-524666-65544585445-2:3</b></td>\n"
                + "    </tr>\n" + "    <tr>\n" + "        <td>Uptime</td>\n"
                + "        <td><b>17 days 13 hours</b></td>\n" + "    </tr>\n" + "    <tr>\n"
                + "        <td>Store percent used</td>\n" + "        <td><b>19</b></td>\n" + "    </tr>\n"
                + "    <tr>\n" + "        <td>Memory percent used</td>\n" + "        <td><b>0</b></td>\n"
                + "    </tr>\n" + "    <tr>\n" + "        <td>Temp percent used</td>\n" + "        <td><b>0</b></td>\n"
                + "    </tr>\n" + "</table>";
        WebClient webClient = new WebClient();
        HtmlPage page = HTMLParser.parseHtml(new StringWebResponse(html, new URL("http://dummy.url.for.parsing.com/")),
                webClient.getCurrentWindow());

        final HtmlTable table = (HtmlTable) page.getByXPath("//table").get(1);

        for (final HtmlTableRow row : table.getRows()) {

            CellIterator cellIterator = row.getCellIterator();

            if (cellIterator.hasNext()) {
                System.out.print(cellIterator.next().asText());
                while (cellIterator.hasNext()) {
                    System.out.print(":" + cellIterator.next().asText());
                }
            }
            System.out.println();
        }

    }

}

Выход:

Name:localhost
Version:5.13.3
ID:ID:TOOLCONTROLPJX526-524666-65544585445-2:3
Uptime:17 days 13 hours
Store percent used:19
Memory percent used:0
Temp percent used:0

@ Rcordoval .. Спасибо, что поделились ..! Очень ценю..! Попробую сейчас ..!

Elena 24.06.2018 10:32

Другие вопросы по теме