Jsoup选择不同的Div类型并按顺序处理它们

时间:2018-06-11 13:54:40

标签: java android web-scraping jsoup

您好我正在使用Jsoup抓取一个html页面,我有2 div彼此相邻:

<div class="time_head">... </div>
<div class="blockfix">...  </div>

我需要获取第一个time_head,然后将其放入其中......来自第一个blockfix的所有元素,依此类推。

到目前为止我尝试了什么:

        Elements time_heads = doc.select("time_head");
        for (Element time_head : time_heads) {

            String the_time_head = Jsoup.parse(String.valueOf(time_head.getElementsByClass("time_head"))).text();
            Log.i("the_time_head ", " Hz:  "+the_time_head);
        }

        Elements blockfixs = doc.select("blockfix");
        for (Element blockfix : blockfixs) {

            String the_blockfix = Jsoup.parse(String.valueOf(time_head.getElementsByClass("blockfix"))).text();
            Log.i("the_blockfix ", " Hz:  "+the_blockfix);
        }

我需要结果如下:

      time_head1:
           ---- blockfix elemts1
           ---- blockfix elemts2
           ---- blockfix elemts3
      time_head2:
           ---- blockfix elemts1
           ---- blockfix elemts2
           ---- blockfix elemts3

1 个答案:

答案 0 :(得分:2)

您希望迭代所有divtime_head的{​​{1}}元素并根据您发现的内容以不同的方式打印它们。在这种情况下,您可以将blockfixselect(CSSquery)之类的查询一起使用,因为elementA, elementB可以在CSS中视为OR运算符。然后根据当前迭代元素的类名选择如何处理它。

演示:

,

输出:

String html = 
          "<div class='time_head'>time_head content1</div>"
        + "<div class='blockfix'>blockfix1</div>"
        + "<div class='blockfix'>blockfix2</div>"
        + "<div class='time_head'>time_head content2</div>"
        + "<div class='blockfix'>blockfix3</div>"
        + "<div class='blockfix'>blockfix4</div>";

Document doc = Jsoup.parse(html);

for (Element el : doc.select("div.time_head, div.blockfix")) {

    if (el.className().equalsIgnoreCase("time_head")) {
        //handle time_head here
        System.out.println(el.text().toUpperCase());
    }

    if (el.className().equalsIgnoreCase("blockfix")) {
        //handle blockfix here
        System.out.println("----"+el.text());
    }
}