使用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.
相关产品推荐
相关产品推荐

