JSoup | Извлечение части HTML - PullRequest
0 голосов
/ 06 марта 2019

У меня проблема с загрузкой сайта с объявлениями об автомобиле. Я хотел бы узнать имя рекламодателя. Основная проблема в том, что иногда это имя показывается по-другому.

1) Имя Kajetan

(https://www.otomoto.pl/oferta/mercedes-benz-klasa-e-w211-bardzo-dobry-stan-bez-wkladu-finansowego-warszawa-ryki-ID6BEBy9.html#2bd424144f)

   <div class="seller-box__seller-info">
    <small class="seller-box__seller-registration">Sprzedający na OTOMOTO od 2015</small>
    <small class="seller-box__seller-type">Osoba prywatna</small>
    <h2 class="seller-box__seller-name"> Kajetan </h2>
   </div>

2) Имя AS MOTORS Centrum Pojazdów Używanych KIA

(https://www.otomoto.pl/oferta/kia-ceed-1-6-crdi-136-km-m-bws-fvat-salon-serwis-polska-ID6BHFu3.html#2bd424144f)

<div class="seller-box__seller-info">
 <small class="seller-box__seller-registration">Sprzedający na OTOMOTO od 2019</small>
 <small class="seller-box__seller-type">Dealer</small>
   <h2 class="seller-box__seller-name">
   <div class="seller-badge"> <img src="xx.jpg" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Ten dealer korzysta z pakietu usług Premium Plus" class="">
   </div>
    <a href="https://asmotorsuzywane.otomoto.pl" title="AS MOTORS Centrum Pojazdów Używanych KIA">AS MOTORS Centrum Pojazdów Używanych KIA</a>
    </h2>
</div>

В первом случае решение легко, потому что я сделаю это так:

public static String fetchOwnerName (String html) {
        Elements ownerElement = Jsoup.parse(html).getElementsByClass("seller-box__seller-info").select("h2");
        String owner = StringUtils.substringBetween(String.valueOf(ownerElement), "\">", "</h2>");
        return owner;
    }

Но во втором случае проблема заключается в том, что после <h2> есть дополнительные <div>, и более того, имя рекламодателя находится между <a href="".

Как мне изменить метод fetchOwnerName на универсальный? Я использую библиотеку JSOUP для разбора HTML-страницы. Спасибо за все ваши предложения.

1 Ответ

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

Вы можете получить текст внутри тегов h2, не беспокоясь о дополнительных тегах i.e div a

Вам просто нужно позвонить .text()

Elements ownerElement = Jsoup.parse(html).getElementsByClass("seller-box__seller-info").select("h2");
 String owner = ownerElement.text();

Этобудет работать, если между h2 тегами

нет никакого другого текста, кроме имени рекламодателя
...