Jsoup在没有类或标签的情况下获取不同标签之间的特定数据

时间:2017-01-18 21:56:03

标签: java jsoup

我试图获取<的数据。 “b”> #8(随机文字)。

现在我有这个代码给了我需要的标题

Document doc = Jsoup.connect(""); 
Elements title = doc.select("div.column.two-third"); 
Element k = title.select("b").get(8);

但我也需要文字。有可能吗?

网站代码示例我试图获取数据

<div class="column two-third"> 

<div style="color:#000000">                                   

<b>Title I dont want:</b> random text // "b" #0  </br>

<b>Title i dont want</b> random text // "b" #1  <br>

<b>Title i dont want:</b> random text // "b" #7  <br>

**<b>TITLE I WANT :</b> random text // "b" #8  <br>**

<div align="justify"> <br> <br>   <b style="color:#000000">text i dont want</b><br>

正如您所看到的,我想要的文本是没有类或ID的Div,文本也没有标签(“p”)。我只需要#8。有可能吗?

1 个答案:

答案 0 :(得分:0)

是的,有可能:<b>标记之后的文本位于文本节点中。因此,在获取正确的<b>标记之后,jsoup允许您使用.parent().childNode(int index)https://jsoup.org/apidocs/org/jsoup/nodes/Node.html#childNode-int-)选择父元素中的特定节点,并为您提供目标<b>元素的索引使用.siblingIndex(),所以只需将索引处的childNode递增1。

示例代码

Elements bTags = htmlDocument.select("div.column.two-third > div b");

if(bTags.size()>8){
    Element title = bTags.get(8);
    String text = title.parent().childNode(title.siblingIndex()+1).toString();
    System.out.println(title.text() + "\n" + text);
}

<强>输出

TITLE I WANT :
random text