2017-01-17 6 views
0

Я хочу проанализировать этот HTML-код с помощью jsoup, но мне нужно извлечь заголовок и субтитры, не используя класс «Изменение имени класса», потому что имя класса всегда меняется. Мне нужен текст только из атрибута «h1» и «р»Как разобрать HTML без вызова прямого родителя

HTML-код:

<header class="my header"> 
    <div class="row"> 
     <h3>I don't want this  </h3> 
     <div class="Changing class name"> 
     <h1>The headline    </h1> 
     <p class=" my subtitle"> 
      The subtitle 
     </p> 
     </div> 
    </div> 
</header> 
+0

Я не знаю, JSoup это хорошо, но если вы не хотите использовать этот класс, вам, вероятно, придется убедиться, что структура всегда одна и те же, а затем доступ к элементам через их пути, то есть 'header. div.div.h1' и 'header.div.div.p' (и если есть несколько div, вам, вероятно, понадобится также постоянный индекс). – Thomas

ответ

0

Я бы комментировать, но я не могу пока

Я знаю, что есть функция getElementsByTag(), которые вы можете использовать, чтобы получить каждый элемент <h1>, так что если вы знаете только заголовок использует <h1> вы можете использовать это один

вы можете также использовать select() (https://jsoup.org/cookbook/extracting-data/selector-syntax), чтобы выбрать заголовок или, например, подзаголовок Вы не сказали, что класс субтитров изменяется таким образом, я предполагаю, что вы можете запрашивать <p> тег класса моих субтитров

+0

Спасибо. Работа частично прекрасна. Я забыл упомянуть, но иногда есть статьи без субтитров, поэтому, когда я делаю String articleSubTitle = doc.getElementsByTag («p»). Get (0) .text(); и нет «p», я получаю исключение – Teddy

+0

Ну, вы можете проверить, есть ли список или что-то, что вы вернетесь из getElementsByTag() имеет размер больше 0 и на основе этого get (0) или нет Я не знаю, что я На самом деле, как весь этот сайт разбирается, он чувствует себя настолько статическим и неправильным xD –

+0

Работает ли он? –

1

Мы использовали getElementsByTag таким образом:

String MyTitle = doc.getElementsByTag("h1").get(0).text(); 

Или мы можем выбрать использоваться таким образом (работа быстрее):

String MyTitle = doc.select("my.header h1").first().text().trim(); 

Что касается субтитров я добавил проверку, чтобы избежать ввода NULL в строку:

Element Subtitle = doc.select("p.my").first(); 
if (Subtitle != null) { 
    String MySubtitle = doc.select("p.my").text().trim();}