Как получить конкретные данные с домашней страницы (jsoup), для последующего предложения if (Java, Eclipse) - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть домашняя страница, где мы хотим отслеживать, если местоположение пустое / свободное. Сайт предоставляется из внешнего источника как услуга от них.

Я уже выполнил вход на Домашнюю страницу через приложение, и когда я проверяю весь документ Документ, он показывает все, и то, что я хочу иметь, также включено.

Сейчас я пытался указать данные, которые я хочу иметь (UID и Status), но я не знаю, как это сделать.

Я понятия не имею, что выбрать в,

Elements data = doc.select("a");

Я пытался использовать div.tiles и div.tableauDeBoard, но не сработал.

Ниже приведен ожидаемый результат:

2652 бесплатно 2653 бесплатно и т. Д. на

Надеюсь, я все сделал правильно, это мой первый пост здесь.

String URL = "..." //URL in there to shorten code
Document doc = Jsoup.connect(URL).get();
Elements data = doc.select("a");
System.out.println(data.outerHTML());
<div id="tableauDeBoard" class="porlet-body" style="min-height:    40px;">
<div class="tiles">
    <a href="..."
    class="tile-v2 undefined popovers" data-content="Status :  free<hr>time : 4h22<hr>last change : 05.11.2019 at 18:46<hr>UID : 2652<hr> Typ : P<hr>connection OK" data-html="true" data-placement="auto" data-container="body" data-trigger="hover" data-original-title="" title="">
    <div class="tile-code-ville"></div>
    <div class="tile-id-automate">2652</div>
    <div class="tile-infos"><span class="tile-icon-transmission">
    <img src="....png">
    </span><span class="tile-icon-jauge"></span></div></a>
    Same code 7 time with different UID/Time/Status
</div>

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете попробовать следующий способ:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TestJsoup{
    public static void main(String[] args) throws InterruptedException {

        StringBuilder html = new StringBuilder();
        html.append("<div id=\"tableauDeBoard\" class=\"porlet-body\" style=\"min-height:    40px;\">");
        html.append(" <div class=\"tiles\">");
        html.append(" <a href=\"...\"");
        html.append(
                "class=\"tile-v2 undefined popovers\" data-content=\"Status :  free<hr>time : 4h22<hr>last change : 05.11.2019 at 18:46<hr>UID : 2652<hr> Typ : P<hr>connection OK\" data-html=\"true\" data-placement=\"auto\" data-container=\"body\" data-trigger=\"hover\" data-original-title=\"\" title=\"\">\r\n"
                        + "");
        html.append("<div class=\"tile-code-ville\"></div>");
        html.append("<div class=\"tile-id-automate\">2652</div>\r\n");
        html.append(" <div class=\"tile-infos\"><span class=\"tile-icon-transmission\">");
        html.append("<img src=\"....png\">\r\n");
        html.append("</span><span class=\"tile-icon-jauge\"></span></div></a>\r\n");
        html.append("document.write(<style type='text/css'>div,iframe { top: 0; position:absolute; }</style>');");
        html.append("</div>");
        html.append("</head><body></body> </html>");
        Document doc = Jsoup.parse(html.toString());

        Elements allClassElements = doc.getElementsByClass("tiles"); //fetching the elements of the class "tiles"
        for (Element ele : allClassElements) {
            Elements links = ele.getElementsByTag("a"); // Finding the anchor tag which contains the required data
            for (Element link : links) { 
                String str = link.attr("data-content"); // to get the status value

                //Without Regex
                String oo = str.substring(str.indexOf(":") + 1, str.indexOf("<hr>"));
                System.out.println(link.text() + " " + oo.replaceAll("\\s+", ""));  //link.text contains id value

                // Using Regex
                Pattern p = Pattern.compile("\\:.*?\\<");
                Matcher m = p.matcher(str);
                if (m.find())
                    System.out.println(link.text() + " "
                            + m.group().subSequence(1, m.group().length() - 1).toString().replaceAll("\\s+", ""));

            }

        }
    }
}

Вывод на консоль:

2652 free
2652 free

Для получения более подробной информации о получении данных с помощью Jsoup, попробуйте посетить кулинарную книгу jsoup по адресу
https://jsoup.org/cookbook/extracting-data/attributes-text-html

...