JSoup не работает для рекурсивных уровней - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь использовать селектор jsoup на рекурсивных уровнях, который возвращает пустые результаты.

Структура HTML

<body>
    <div>
        <div>
            <div class="classA"/>
        </div>
    </div>
</body>

Java-код

Document doc = Jsoup.connect("https://someUrl//url").get();
int size=doc.body().select(".classA").size(); // Returns 0

1 Ответ

1 голос
/ 13 марта 2019

Ваш код работает для меня, используя последнюю версию Jsoup 1.11.3.

Document doc = Jsoup.parse("<body> <div> <div> <div class=\"classA\"/> </div> </div> </body>");
int size = doc.body().select(".classA").size();
System.out.println(size);   // displays: 1

Возможная причина вашей проблемы:

  • Вы используете более старую версию Jsoup, что-то между 1.9.2 и 1.10.3, потому что была ошибка, из-за которой классы сохранялись только в нижнем регистре. https://github.com/jhy/jsoup/issues/814 https://github.com/jhy/jsoup/issues/830 Исправлено в версии 1.10.3.
  • Сайт, который вы пытаетесь проанализировать, загружает дополнительный контент с помощью JavaScript (AJAX). Jsoup может только «увидеть» оригинальный HTML до модификации JavaScript. Чтобы просмотреть исходный HTML-код, посетите веб-страницу в веб-браузере и нажмите CTRL + U (Просмотреть исходный код). Не используйте отладчик / firebug и Inpect, поскольку они отображают окончательный, уже измененный HTML-код.

Ответ на комментарий:

Трудно догадаться без URL, который вы пытаетесь проанализировать. Ваш браузер, вероятно, загружает динамические части этой веб-страницы с разных URL-адресов. Вы можете попытаться разобрать только эти фрагменты HTML. Проверьте мой ответ здесь: Как загрузить все содержимое HTML - Jsoup

...