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

使用JSoup解析HTML时如何过滤格式标签提取指定纯文本值

JSoup默认的解析器就会自动修正你提到的缺失闭合标签、嵌套顺序错误等畸形HTML问题,直接调用Jsoup.parse(待解析HTML字符串)即可得到结构正常的Document对象,不需要额外做兼容配置。

针对你需要提取标签后值的需求,有两种常用的实现方式:

方法1:节点定位提取(更可靠)

直接定位到td内的标签,读取它的下一个兄弟文本节点的内容,不会受值内包含冒号的场景影响,代码如下:

import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.Jsoup;

// 省略其他业务代码
Document document = Jsoup.parse(htmlContent);
Material material = new Material();
// 直接选中内层的属性table,避免和外层table混淆
Elements propertyRows = document.select("table table tr");

for (Element row : propertyRows) {
    Elements cols = row.select("td");
    // 处理当前行第一列
    if (cols.size() >= 1) {
        Element col = cols.get(0);
        Element label = col.selectFirst("b");
        String key = label.text().trim();
        String value = label.nextSibling().toString().trim();
        switch (key) {
            case "Origin:":
                material.setOrigin(value);
                break;
            case "Supplier:":
                material.setSupplier(value);
                break;
            case "Type:":
                material.setType(value);
                break;
        }
    }
    // 处理当前行第二列
    if (cols.size() >= 2) {
        Element col = cols.get(1);
        Element label = col.selectFirst("b");
        String key = label.text().trim();
        String value = label.nextSibling().toString().trim();
        switch (key) {
            case "Count:":
                material.setCount(value);
                break;
            case "Must Burninate:":
                material.setBurninate("Yes".equals(value));
                break;
            case "Add Afterwards:":
                material.setAddAfterwards("Yes".equals(value));
                break;
        }
    }
}
// 提取name字段
material.setName(document.selectFirst("h2").text().trim());

方法2:文本分割(更简洁)

如果你的场景下属性标签永远不会包含冒号,可以直接把td的全文本按冒号分割为两部分,取第二部分修剪后即可得到值:

// 替换掉原代码中取值的逻辑即可
String fullText = col.text();
String value = fullText.split(":", 2)[1].trim();

两种方法都可以兼容Supplier这种值为空的场景,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:02