使用 jsoup 从同一个 class 中的一些 div 中提取文本

Extract text from only some divs in the same class with jsoup

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

问题是,我想从 div 获取具有 class="name".

的文本

但是,可以更多<div>s class(我不想从那些得到文本)。

在 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>
.  
.

所以唯一的区别是我想要的文本 <div> 里面没有 <span>。但是我还没有找到一种方法可以将其用作提取 jsoup 中文本的键。

可能吗?

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

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

请注意,您 "do" 和 "don't" 上面想要的文本位于相同的 relative HTML 位置,事实上我有不知道为什么你想要一个或另一个。 HTML 和 JSoup 将看到它们相同。

如果要避免元素包含 span 元素,那么一种方法是遍历上面获得的元素并通过 select 或它们是否具有 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();
        }
    }

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