You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jsoup提取class属性带stars的span标签并获取星级数值

解决方案

问题根因

  • 目标网站存在反爬校验,Jsoup默认发起的请求没有携带浏览器特征头,会被网站拦截,返回的内容不包含正常页面的span标签
  • 原有选择器没有过滤带stars标识的属性,即使拿到完整页面也会选中无关的评级标签

完整可运行代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StarExtractor {
    public static void main(String[] args) {
        String url = "https://www.morningstar.co.uk/uk/funds/snapshot/snapshot.aspx?id=F00000WYA1";
        Document doc = null;
        try {
            // 模拟浏览器请求头,避免反爬拦截
            doc = Jsoup.connect(url)
                    .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
                    .get();
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        // 精准选中同时包含rating_sprite和stars的span标签
        Elements spans = doc.select("span[class*='rating_sprite'][class*='stars']");
        // 定义正则提取stars后面的数字
        Pattern pattern = Pattern.compile("stars(\\d+)");
        spans.forEach(span -> {
            String classAttr = span.attr("class");
            Matcher matcher = pattern.matcher(classAttr);
            if (matcher.find()) {
                int starNum = Integer.parseInt(matcher.group(1));
                System.out.println("提取到的星级为:" + starNum);
            }
        });
    }
}

逻辑说明

  • 请求头添加User-Agent参数模拟正常浏览器访问,可自行替换为你本地浏览器的实际UA值
  • CSS选择器[class*=xxx]表示匹配属性值包含指定字符串的元素,两个条件叠加可以精准定位目标span,不会选中另一个analyst-rating类的标签
  • 正则stars(\\d+)可以从class属性中提取stars后面的连续数字,支持1-5星的所有场景

内容的提问来源于stack exchange,提问作者serah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:18:03