【问题标题】:Jsoup Getting specific data between different tags without class or tagsJsoup在没有类或标签的不同标签之间获取特定数据
【发布时间】:2017-01-19 23:09:08
【问题描述】:

我正在尝试获取 #8 的数据(带有随机文本)。

现在我有这段代码,可以给我我需要的 TITLE

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。有可能吗?

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,这实际上有助于解决我的问题。我不知道如何使用“父母”、“孩子”和节点元素,但有了这个我理解得更好了。
    • @MrJaviiPR 当您使用 chrome 开发人员工具 (f12) 时,在 Elements 选项卡中选择一个元素并在附加面板中从 Styles 切换到 Properties 以检查 DOM 节点的属性,这可能对了解 jsoup 在做什么。另请阅读:w3schools.com/jsref/dom_obj_all.asp。所以b标签是一个节点,后面的文本是同级(兄弟)节点,节点在有序列表中,所以文本节点的索引是b标签的索引由一个提升。希望这能让事情变得更清楚。
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多