Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

С помощью Jsoup спарсить данные из определенной родительской ветки

#java #android #парсер #jsoup




При парсинге страницы  в Андроид приложение (пользую последнюю версию либ от Jsoup.org),
выбираю только дочерние элементы(Выбираются все элементы, которые на схеме выделены
розовым), а можно как нибудь выбрать сначала дочерние элементы с первого родителя,
а потом только со второго и т.д.Как это примерно реализовать?
    


Ответы

Ответ 1



Очевидное решение с выбором родительских элементов и последующим поиском детей в них. public static void main(String[] args) { String html = "" + "" + " Try jsoup" + "" + "" + "
" + "

child1.1

" + "

child1.2

" + "

child1.3

" + "
" + "
" + "

child2.1

" + "

child2.2

" + "

child2.3

" + "
" + "
" + "

child3.1

" + "

child3.2

" + "

child3.3

" + "
" + "
" + "
" + "" + ""; Document doc = Jsoup.parse( html ); Elements parents = doc.select( "div" ); // выбор родителей System.out.printf( // можно выбрать элемент по индексу "parent[%d]: %s#%s%n", 2, parents.get( 2 ).tagName(), parents.get( 2 ).id() ); for ( Element parent : parents ) { System.out.printf( "parent: %s#%s%n", parent.tagName(), parent.id() ); for ( Element child : parent.select( "p" ) ) { // выбор внутри родителя System.out.println( child.text() ); } } } Выведет: parent[2]: div#parent3 parent: div#parent1 child1.1 child1.2 child1.3 parent: div#parent2 child2.1 child2.2 child2.3 parent: div#parent3 child3.1 child3.2 child3.3 parent: div#parent4 Используя псевдоселектор :has(selector), можно выбрать только те
, в которых есть

: Elements parents = doc.select( "div:has(p)" ); Тогда в выдачу не попадет #parent4.

Комментариев нет:

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