Jsoup查询多个子选择器

时间:2015-04-03 09:10:13

标签: jsoup

我试图选择直接从父级下降的子元素,但我想使用多个选择器。我已经尝试了以下的

"> p, >h3"

但它会抛出SelectorParseException

HTML示例代码(我试图获取第一个<h3>代码和后面的两个<p>代码:

<div class="content">
<h3 class="crossheading">Anschlag erinnert an Attentat in
    Westgate-Shopping-Mall</h3>
<p>Im Lauf des viert&auml;gigen Dramas starben mehr als 70
    Menschen, darunter die f&uuml;nf Attent&auml;ter; rund 175 weitere
    Personen wurden verletzt. Teile der Mall st&uuml;rzten in Folge der
    Kampfhandlungen ein.</p>
<p>Seit ihrer Vertreibung aus der somalischen Hauptstadt Mogadischu
    2011 ver&uuml;bte die Terrorgruppe al-Shabaab vermehrt Anschl&auml;ge
    im benachbarten Kenia und Uganda.</p>
<div class="infoEl center edge">
    <div class="clearfix">
        <header>
            <h2>Dschihadistische Terrorgruppen weltweit</h2>
        </header>
        <div class="hentry  landscape t9l  item1">
            <a
                href="/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706.bild.html"
                class="variant"
                data-variation="{\u0022name\u0022:\u0022Conversion-AB-060115\u0022,\u0022variations\u0022:[{\u0022url\u0022:\u0022/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706,var\u003da.bild.html\u0022,\u0022prop\u0022:50},{\u0022url\u0022:\u0022/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706,var\u003db.bild.html\u0022,\u0022prop\u0022:50}]}"
                rel="bookmark"><img class="photo"
                src="http://bilder.bild.de/fotos-skaliert/teaser_40330727_mbqf-1418219891-38921172/2,w=189,c=0.bild.jpg"
                alt="K&auml;mpfer der Terrorgruppe „Islamischer Staat im Irak und in Syrien“" />
                <ul>
                    <li class="premium bildplus hide-text">Premium BildPlus
                        Inhalt</li>
                </ul>
                <h3 class="entry-title">
                    <span class="kicker">ISIS, al-Qaida, Taliban</span> <span
                        class="headline"><span>Der gro&szlig;e Terror-Check</span></span>
                </h3> </a>
            <p class="entry-content">
                ISIS ist auf den Vormarsch und damit nicht allein! BILD listet auf,
                welche Dschihad-Gruppen es gibt und wo sie agieren.<span> <a
                    href="/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706.bild.html"
                    class="variant"
                    data-variation="{\u0022name\u0022:\u0022Conversion-AB-060115\u0022,\u0022variations\u0022:[{\u0022url\u0022:\u0022/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706,var\u003da.bild.html\u0022,\u0022prop\u0022:50},{\u0022url\u0022:\u0022/bild-plus/politik/ausland/isis/die-weltkarte-des-terrors-37906706,var\u003db.bild.html\u0022,\u0022prop\u0022:50}]}"
                    rel="tag">mehr...</a></span>
            </p>
        </div>

    </div>
</div>

NOT:".content > h3, .content > p"无法提供帮助,因为我正在尝试构建通用网络抓取工具。

2 个答案:

答案 0 :(得分:1)

您需要使用CSS Selector查询:

Document document = Jsoup.connect("url").get();
//get h3
Element e1 = document.select("div.content > h3").first();
System.out.println(e1.text());

//get first p ..first() used as you are looking only for the first element
Element e2 = document.select("div.content > h3 + p").first();
System.out.println(e2.text());

//get second p
Element e3 = document.select("div.content > h3 + p:nth-child(2)").first();
System.out.println(e3.text());

我希望这有帮助!

您可以在此网站上在线试用选择器查询 - http://try.jsoup.org/

答案 1 :(得分:0)

if (desiredTag != null) {
        for (Element el : desiredTag.select("> *")) {
            if (!el.tagName().equals("p") && !el.tagName().equals("h3")
                    && !el.tagName().equals("h2")
                    && !el.tagName().equals("h1")) {
                el.remove();
            }
        }
        content = desiredTag.text();
    }

此处desiredTag<div>标记,其中content