【问题标题】:Extract text from only some divs in the same class with jsoup使用 jsoup 仅从同一类中的某些 div 中提取文本
【发布时间】:2016-10-09 17:31:55
【问题描述】:

我想使用 jsoup 从网站的特定 <div> 中提取文本,但我不确定如何。

问题是,我想从具有class="name" 的 div 中获取文本。

但是,这个类可以更多<div>s(我不想从这些类中获取文本)。

在 HTML 文件中是这样的:

.  
.
<div class="name">
Some text I don't want
<span class="a">Tree</span>
</div>
.  
.
<div class="name">Some text I do want</div>
.  
.

所以唯一的区别是&lt;div&gt;我想要的文本里面没有&lt;span&gt;。但是我还没有找到一种方法来使用它作为提取jsoup中文本的关键。

有可能吗?

【问题讨论】:

    标签: java jsoup html-parsing


    【解决方案1】:

    使用 JSoup 的 selector syntax。例如选择所有 div 的 class= "name" 使用

    Elements nameElements = doc.select("div.name");
    

    请注意,您在上面“做”和“不”想要的文本位于相同的相对 HTML 位置,实际上我不知道您为什么想要其中一个。 HTML 和 JSoup 将看到它们相同。

    如果要避免包含span元素的元素,那么一种方法是遍历上面获得的元素,并通过选择器测试它们是否具有span元素:

        Elements nameElements = doc.select("div.name");
    
        for (Element element : nameElements) {
            if (element.select("span").isEmpty()) {
                System.out.println("No span");
                System.out.println(element.text());
                System.out.println();
            } else {
                System.out.println("span");
                System.out.println(element.text());
                System.out.println();
            }
        }
    

    【讨论】:

    • 两个文本都包含一些信息,但我只需要来自
      的信息,没有 里面,这就是原因。
    • 谢谢,这正是我所需要的。
    【解决方案2】:

    您可以选择所有具有 class="name" 的 div 元素,然后循环遍历它们。检查一个元素是否有子元素 - 如果没有,这就是你想要的 div。

    【讨论】:

    • 要查看元素是否有子元素,我需要使用元素的方法 child()?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签