【问题标题】:extracting a element from jsoup for a text value match in the element attribute从 jsoup 中提取元素以匹配元素属性中的文本值
【发布时间】:2021-12-08 22:07:22
【问题描述】:

如何获得属性中包含特定文本的跨度?我正在尝试提取文本“星星”之后的数字。那么如何选择一个包含文本“rating_sprite stars”的跨度标签,并且我希望从属性中提取值“star5”,以便从文本中获取 5。

目前我没有找回任何元素!

 String url = "https://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F00000WYA1";
        Document doc = null;
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Elements spans = doc.select("span.rating_sprite");
        System.out.println(spans);

HTML sn-p 看起来像这样

<div class="snapshotTitleBox">
  <h1>Comgest</h1>
  <span class="rating_sprite stars5"></span>
  <span class="rating_sprite analyst-rating-5"></span>
  <div style="float:right; margin-top:6px;"></div>
</div>

【问题讨论】:

  • 您的第一个代码片段没有为我返回任何span.rating_sprite

标签: java html jsoup


【解决方案1】:

仅使用 jsoup 无法做到这一点。但是您已经拥有所有span.rating_sprite 元素,因此您可以遍历它们中的每一个并找到一个与正则表达式stars(\d) 匹配的类。然后您可以捕获仅包含数字的第一组:

    Pattern p = Pattern.compile("stars(\\d)");
    for (Element span : spans) {
        for (String className : span.classNames()) {
            Matcher m = p.matcher(className);
            if (m.matches()) {
                System.out.println("stars: " + m.group(1));
            }
        }
    }

【讨论】:

猜你喜欢
  • 2016-05-17
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2016-10-16
相关资源
最近更新 更多