如何使用Jsoup从HTML元素的style属性中提取background值
提取style属性中的background值(基于Jsoup)
Jsoup本身没有直接解析style内单个CSS属性的内置API,但可以结合字符串处理或正则表达式快速提取目标值,以下是两种实用方法:
方法1:手动分割解析style字符串
先通过Jsoup拿到完整的style属性,再分割为单个CSS属性对,遍历筛选出background属性:
// 1. 获取目标div元素 Element badgeDiv = doc.select("#badge").first(); if (badgeDiv == null) { // 处理元素不存在的情况 return; } // 2. 获取完整style属性内容 String styleContent = badgeDiv.attr("style"); // 3. 分割为单个属性对 String[] styleItems = styleContent.split(";"); String backgroundValue = null; // 遍历查找background属性 for (String item : styleItems) { String trimmedItem = item.trim(); if (trimmedItem.startsWith("background:")) { // 提取冒号后的属性值,去除首尾空格 backgroundValue = trimmedItem.substring(trimmedItem.indexOf(":") + 1).trim(); break; } } // 处理HTML转义的引号(原style中用"代替") if (backgroundValue != null) { backgroundValue = backgroundValue.replace(""", "\""); // 此时backgroundValue就是你要的完整值 System.out.println(backgroundValue); }
方法2:正则表达式匹配
如果觉得分割遍历繁琐,可以用正则直接匹配background属性的取值范围:
Element badgeDiv = doc.select("#badge").first(); if (badgeDiv == null) { return; } String styleContent = badgeDiv.attr("style"); // 正则匹配:匹配background: 后面直到分号或字符串结束的内容 Pattern bgPattern = Pattern.compile("background:\\s*(.*?)(?=;|$)"); Matcher matcher = bgPattern.matcher(styleContent); if (matcher.find()) { String backgroundValue = matcher.group(1).trim(); // 替换转义引号 backgroundValue = backgroundValue.replace(""", "\""); System.out.println(backgroundValue); }
注意事项
- 上述方法针对的是完整的
background简写属性,如果需要提取background-image这类子属性,只需把匹配条件改成startsWith("background-image:")或调整正则即可。 - 原HTML中的
"是HTML转义字符,对应普通双引号,提取后需要替换才能得到正常的URL格式。
内容的提问来源于stack exchange,提问作者Kavi Chinna
相关产品推荐
相关产品推荐

