Как получить первый тег href из каждого div с помощью Jsoup - PullRequest
0 голосов
/ 16 апреля 2020

Я использую класс элементов Jsoup для получения ссылок в теге в указанном c div. В большинстве случаев у div есть только один тег . Тем не менее, есть один такой сценарий, когда в div есть два тега . В таком сценарии ios я хочу получить только первый URL-адрес тега и игнорировать второй. Есть ли способ добиться этого? Пожалуйста, помогите.

Java Код

String response =  ; // html code
Document document = Jsoup.parse(response);
if (document != null) {
 Elements links = document.select("div.kCrYT > a[href]"); // gets all the URL's
 for (Element link : links) {
   String linkHref = link.attr("href");
   System.out.println("linkHref: " + linkHref);
 }

HTML код

<div>
    <div class="ZINbbc xpd O9g5cc uUPGi">
        <div class="kCrYT">
            <a href="/url?q=https://en.wikipedia.org/wiki/Mobile_phone&amp;sa=U&amp;ved=2ahUKEwjvy9fH9unoAhWLmOAKHZMGCYcQFjAaegQIARAB&amp;usg=AOvVaw3g3Lc1rBf-L5ZlWeE9ggx7">
                <div class="BNeawe vvjwJb AP7Wnd">
                    Mobile phone - Wikipedia
                </div>
                <div class="BNeawe UPmit AP7Wnd">
                    https://en.wikipedia.org › wiki › Mobile_phone
                </div>
            </a>
        </div>
        <div class="x54gtf"></div>
        <div class="kCrYT">
            <div>
                <div class="BNeawe s3v9rd AP7Wnd">
                    <div>
                        <div>
                            <div class="BNeawe s3v9rd AP7Wnd">
                                A mobile phone, cellular phone, cell phone, cellphone or hand phone, sometimes shortened to simply mobile, cell or just phone, is a portable telephone that can&nbsp;...
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div>
    <div class="ZINbbc xpd O9g5cc uUPGi">
        <div class="kCrYT">
            <a href="/url?q=https://www.digitaltrends.com/mobile/&amp;sa=U&amp;ved=2ahUKEwjvy9fH9unoAhWLmOAKHZMGCYcQtwIwG3oECAIQAQ&amp;usg=AOvVaw0SEels_2PKSQyaFaMbZQpT">
                <div class="BNeawe vvjwJb AP7Wnd">
                    Mobile Phone and App News / Reviews | iOS, Android, and More ...
                </div>
                <div class="BNeawe UPmit AP7Wnd">
                    https://www.digitaltrends.com › mobile
                </div>
            </a>
        </div>
        <div class="x54gtf"></div>
        <div class="kCrYT">
            <a href="/url?q=https://www.digitaltrends.com/mobile/&amp;sa=U&amp;ved=2ahUKEwjvy9fH9unoAhWLmOAKHZMGCYcQuAIwG3oECAIQAg&amp;usg=AOvVaw1NrWt0iIdzg2X2zgb-h8Vq">
                <div class="lcJF1d SXn0g GXKcHe p1CInd">
                    <img class="EYOsld" style="display:block;max-width:120px;max-height:90px" alt="Video for mobile" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" id="dimg_1" data-deferred="1" />
                    <div class="qW7zYd HMoqlc"></div>
                    <div class="qW7zYd X8r0X" style="background-size:36px"></div>
                </div>
            </a>
            <div>
                <div class="BNeawe s3v9rd AP7Wnd">
                    <div>
                        <div>
                            <div class="BNeawe s3v9rd AP7Wnd">
                                <span class="r0bn4c rQMQod">3 days ago</span>
                                <span class="r0bn4c rQMQod"> &middot; </span>News, reviews, and discussion regarding Android, iOS, and everything else in the mobile realm ...Posted: 3 days ago
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="rl7ilb"></div>
        </div>
    </div>
</div>

1 Ответ

0 голосов
/ 16 апреля 2020

Предполагая, что ваши теги <a> являются прямыми дочерними элементами соответствующего тега <div>, вы можете использовать псевдо-селектор first-child :

document.select("div.kCrYT > a:first-child[href]")

Если это не так гарантированно, вы можете использовать псевдоселектор первого типа , чтобы получить эквивалентный эффект:

document.select("div.kCrYT > a:first-of-type[href]")

РЕДАКТИРОВАТЬ

Некоторые дополнительные сведения для приведенного выше решения, в случае, если это помогает другим людям (я знаю, что это не сработало для OP, как отмечено в их комментарии).

Я использовал версию jSoup 1.13.1:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.13.1</version>
</dependency>

код:

private void getDivs() {
    String response = testHtml; // the sample html code
    Document document = Jsoup.parse(response);
    if (document != null) {
        // this works:
        Elements links = document.select("div.kCrYT > a:first-child[href]"); 
        // this also works:
        //Elements links = document.select("div.kCrYT > a:first-of-type[href]");
        for (Element link : links) {
            String linkHref = link.attr("href");
            System.out.println("linkHref: " + linkHref);
        }
    }
}
...