【问题标题】:Jsoup select different Div types and handle them sequentiallyJsoup选择不同的Div类型并依次处理
【发布时间】:2018-06-11 13:54:39
【问题描述】:

您好,我正在使用 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

【问题讨论】:

  • 我不确定您要达到的目标。您能否发布带有实际输入和预期输出的示例?
  • 我已经用输出更新了我的问题.. 输入 2 div 彼此相邻

标签: java android web-scraping jsoup


【解决方案1】:

您似乎想要遍历所有具有time_headblockfixdiv 元素,并根据您发现的内容以不同方式打印。在这种情况下,您可以将select(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());
    }
}

输出:

TIME_HEAD CONTENT1
----blockfix1
----blockfix2
TIME_HEAD CONTENT2
----blockfix3
----blockfix4

【讨论】:

  • 这就是我需要的,谢谢.. 只是为了澄清在time_head 之后有一个 div blockfix ,而在blockfix 里面有很多 div.. 我应该做同样的方法吗?
  • 请@Pshemo。
  • 答案取决于您想要做什么以及这些内部元素的结构。由于我真的不知道您的目标(涉及那些内在元素)是什么,我无法真正帮助您。顺便说一句,如果它会使已经发布的答案无效,那么不要在这里提供澄清,而是考虑在separate question 中询问它,您将在其中提供有关 HTML 结构和您面临的问题的所有重要细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多