面对获取数据的问题

时间:2019-06-12 11:36:01

标签: java jsoup

我有一个html页面,我正在尝试从中获取数据(文本)。面对下面的问题。

以下是html页面代码

<div class="main-class">
<div class="sub-class">
<p class="title">Title of data one</p>
<p>one data</p>
<p>two line</p>
<p> three line</p>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</div>
<div class="sub-class">
<p class="title">Title of data two</p>
<p>asd sdffsdfsdf</p>
    <p>asd dfgdfg</p>
    <p>asd dfgdfgd</p>
    <ul>
    <li>qweqwe</li>
    <li>fghgfhgf</li>
    <li>gdfgdfgd</li>
    </ul>
    <p>new p tag</p>
    <table>ignore</table>
    </div>
    </div>

有一个主类两个子类。我可以从主类中获取所有文本。但是需要将来自第一个子类的数据存储在一个字符串中,并将第二个子类的数据存储在另一个字符串中。需要忽略最后一个p标签和表格标签。

条件是,有时可能没有第一个子类。因此,第二个子类的数据必须进入第二个字符串,而第一个字符串应为null。

我尝试了以下代码

Elements data = doc.getElementsByClass("sub-class");
    System.out.println(data);
    String allData= data .text();

我从子类中获取所有文本。

我面临以下问题 1.无法在字符串one =?中存储第一个子类数据。 2.无法在字符串two =?中存储第二个子类数据。 3.无法获得<ul> <li> tag text data。 4.无法忽略最后一个<p> tag and <table> tag

Elements elements = document.getElementsByClass("main-class");
   Elements subClassData1 = document.select("div.sub-class:eq(0)");

    if(elements.hasText()){
      return elements.text().toString();
    }
    else if(subClassData1 != null){
      return subClassData1.text().toString();

      }

    }

预期结果是

子类一数据=“ 数据一的标题:一数据二行三行a b c

第二类数据=“ 第二种数据的标题:asd sdffsdfsdf asd dfgdfg asd fgdfgd     qweqwe fghgfhgf gdfgdfgd

1 个答案:

答案 0 :(得分:0)

不太确定是否要查找此代码,但是下面的代码解决了所有3个问题,请根据您的条件进行调整,方法如下:

基本上,对于2个子类元素,您具有2个元素,并且可以对其进行迭代。 同样,对于第二个子类元素,可以删除最后两个子元素。

    Document jsoupDocument = Jsoup.parse(in, "UTF-8");
    Elements allSubClassElements = jsoupDocument.getElementsByClass("sub-class");
    System.out.println("Num of sub-classes found "+allSubClassElements.size());
    System.out.printf("First Subclass %s", allSubClassElements.get(0).text());
    System.out.println();
    Element secondSubClassElement = allSubClassElements.get(1);

    //want to remove last 2 elements
    for (int i = secondSubClassElement.children().size(), j = 0; j < 2; i--, j++) {
        //element would be updated here.
        secondSubClassElement.child(i - 1).remove();
    }
    System.out.printf("Second Subclass %s", secondSubClassElement.text());