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

使用Jsoup提取HTML中指定data-id节点数据的技术求助

解决Jsoup提取带data-id的tr节点内容问题

嘿,作为Jsoup新手遇到这个问题很正常,我来帮你补全代码并解释清楚怎么实现你要的功能!

首先,我们的目标是:

  • 选中所有带有data-id属性的<tr>标签
  • 提取每个tr里第一个<td class="th">的文本(比如Dimension、Weight)和第二个<td class="l">的文本(对应的值)
  • 把这些内容拼接成你想要的格式

完整代码示例

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

public class JsoupScraper {
    public static void main(String[] args) throws Exception{
        // 替换成你要抓取的实际URL
        final Document document = Jsoup.connect("你的目标URL").get();
        
        // 选择所有带有data-id属性的tr元素
        Elements trElements = document.select("tr[data-id]");
        
        // 用来拼接结果的字符串
        StringBuilder result = new StringBuilder();
        
        // 遍历每个tr元素
        for (Element tr : trElements) {
            // 获取第一个td(属性名)的文本,去除多余空格
            String propertyName = tr.selectFirst("td.th").text().trim();
            // 获取第二个td(属性值)的文本,去除多余空格
            String propertyValue = tr.selectFirst("td.l").text().trim();
            
            // 把属性名和值拼接到结果里,可按需调整分隔符
            result.append(propertyName).append(" ").append(propertyValue).append(" ");
        }
        
        // 输出最终结果,trim()去掉末尾多余的空格
        System.out.println(result.toString().trim());
    }
}

代码细节解释

  • document.select("tr[data-id]"):这是Jsoup的CSS选择器语法,专门选中所有带有data-id属性的<tr>元素,不管data-id的具体值是什么。
  • tr.selectFirst("td.th"):在单个tr标签内,精准定位第一个class为th的td元素,trim()用来清除文本前后的换行、空格等冗余空白。
  • StringBuilder拼接结果:相比直接用+拼接字符串,它在处理大量元素时性能更优,避免频繁创建字符串对象。

针对你期望结果的说明

你给出的期望是「Dimension 190gr Ringtone」,看起来可能是笔误?按照你提供的网页结构,代码运行后会输出:
Dimension 152.5x82x9.8mm (6x3.23x0.39") Weight 190gr (6.7oz) Ringtone

如果确实需要筛选特定data-id的节点(比如只取13、15、116),只需把选择器改成tr[data-id="13"], tr[data-id="15"], tr[data-id="116"]即可。

内容的提问来源于stack exchange,提问作者Constantin N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:21