【问题标题】:Find "Span" that is within "div" in HTML using JSoup使用 JSoup 在 HTML 中的“div”中查找“Span”
【发布时间】:2019-10-18 22:47:24
【问题描述】:

我正在尝试使用 JSoup 在此处查找此范围内的文本: <div class="_6wab"><span>$35 raised</span>

我已经成功地在如下所示的分隔符中获取了文本: <div class="_6wae">Time</div>

使用这个:

Document doc = Jsoup.connect("https://" + line).userAgent("Mozilla/17.0").get();
String goal = doc.select("div._6wae").html();

所以我知道我的方法适用于在分隔符内查找文本,但我不确定如何在分隔符内查找文本。

提前非常感谢!

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    此代码可能有效。

    首先,找到第一个 '_6wab' 类的 div。

    Element div = doc.getElementsByClass("_6wab").first();
    

    然后,拿到div后,找到内部span。

      Element span = div.select("span").first();
    

    最后,得到文本。

    System.out.println(span.text());
    

    【讨论】:

    • 有趣的是,它不会在您发送给我的第一行中出现 NPE,但是当我尝试执行 div.select 时,它会引发 NPE。同样,当我尝试执行 system.out.println(div().html().tostring);它npes。
    • 确认是否有_6wab类的元素,否则会抛出空指针。
    • 你是对的!我没有意识到 div 是半动态的。谢谢!
    • 在类不存在的情况下除了NPE之外,如果div内有多个spans,这里只会选择第一个。
    【解决方案2】:

    应该这样做:

    Document doc = Jsoup.parse("<div class=_6wab><span>$35 raised</span></div><p><span>hi</span></p>");
    //use css selectors
    Elements rows = doc.select("div._6wab span");
    System.out.println(rows.eachText());
    

    输出:

    [$35 raised]
    

    请注意,仅打印 div 内 span 内的文本。此外,如果 HTML 中不存在该类,则不会抛出 NullPointerException。在这种情况下,将返回一个空列表。这还将捕获具有给定类的 div 内的 所有 跨度。

    【讨论】:

    • 我更新了它以使用 css 选择器,就像在 javascript 中一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多