Есть ли способ разобрать весь тег HTML в JSoup? - PullRequest
0 голосов
/ 12 июля 2020

Привет, мне интересно, есть ли способ проанализировать весь тег HTML с помощью JSoup? В моих примерах изображений ниже все пять элементов (4 изображения и 1 строка) находятся внутри контейнера «li». Однако, когда вы открываете тег «li», появляется несколько вложенных контейнеров. Есть ли способ разобрать его так, чтобы у меня был доступ ко всем 5 элементам, содержащимся в этом теге «li»? Я подумываю использовать getElementsMatchingOwnText ("Collins"), но это, кажется, дает мне только "span class =" text text_14 mix-text_color7 "> Panorama". Любая помощь будет оценена, спасибо! enter image description here enter image description here

введите описание изображения здесь

1 Ответ

2 голосов
/ 12 июля 2020

Да, вы можете перебирать дочерние элементы вашего тега <li> с помощью jsoup.

Вот упрощенная версия HTML на вашем снимке экрана, показывающая 5 элементов:

<li>
    <span class="foo"><img src="bar" class="img"></span>
    <span class="bar">Collins</span>
    <i class="baz1"><img src="baz1" class="img"></i>
    <i class="baz2"><img src="baz2" class="img"></i>
    <i class="baz3"><img src="baz3" class="img"></i>
</li>

Предполагая, что вы выбрали этот конкретный тег c <li> в своем документе, вы можете использовать следующий подход:

String html = "<li><span class=\"foo\"><img src=\"bar\" class=\"img\"></span><span class=\"bar\">Collins</span><i class=\"baz1\"><img src=\"baz1\" class=\"img\"></i><i class=\"baz2\"><img src=\"baz2\" class=\"img\"></i><i class=\"baz3\"><img src=\"baz3\" class=\"img\"></i></li>";

Document document = Jsoup.parse(html);

Element element = document.selectFirst("li");
element.children().forEach(child -> {
    // do your processing here - this is just an example:
    if (child.hasText()) {
        System.out.println(child.text());
    } else {
        System.out.println(child.html());
    }
});

Приведенный выше код выводит следующий результат:

<img src="bar" class="img">
Collins
<img src="baz1" class="img">
<img src="baz2" class="img">
<img src="baz3" class="img">

ОБНОВЛЕНИЕ

Если отправной точкой является URL-адрес, вам нужно будет начать со следующего:

Document document = Jsoup.connect("https://www...").get();

Тогда упражнение посвящено определению уникальный способ найти нужный элемент c. Итак, если мы обновим мой предыдущий пример, предположим, что ваша веб-страница выглядит так:

<html>
    <head>...</head>
    <body>
        <div>
            <ul class="vList_4">
 
                <li>
                    <span class="foo"><img src="bar" class="img"></span>
                    <span class="bar">Collins</span>
                    <i class="baz1"><img src="baz1" class="img"></i>
                    <i class="baz2"><img src="baz2" class="img"></i>
                    <i class="baz3"><img src="baz3" class="img"></i>
                </li>
            </ul>
        </div>
    </body
</html>

Здесь у нас есть класс в теге <ul> с именем vList_4. Если это уникальное имя класса, мы можем использовать его для перехода к этому разделу страницы HTML (идентификаторы лучше, чем имена классов, потому что они гарантированно уникальны, но я не видел имен идентификаторов на вашем снимке экрана) .

Теперь вместо моего предыдущего селектора:

Element element = document.selectFirst("li");

Мы можем использовать этот более специфичный c селектор:

Element element = document.selectFirst("ul.vList_4 li");

Будут напечатаны те же результаты как и раньше.

Итак, все дело в том, что вы смотрите на структуру страницы и выясняете, как перейти к соответствующему разделу страницы.

См. здесь технические подробности описание того, как сконструированы селекторы.

...