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

如何使用Java Jsoup从网页提取图片的精确URL

如何用Jsoup提取style属性中的背景图片URL?

我想要从网页中提取图片的URL,相关区域的HTML结构如下:

<span class="news-img" style="background-image:url(https://theaddressofimage"></span>

我使用的代码如下:

Document pages = Jsoup.connect(url).get(); 
System.out.println(""+pages.select("span[style]"));

当前输出的是完整的HTML元素,但我期望仅获取图片URL,而非整个元素;我也尝试过使用attr()或absUrl()方法,但没有效果!请问如何才能仅提取出URL?

嘿,我懂你的困扰——之前的方法不管用,是因为图片URL并没有存在单独的属性(比如src或者href)里,而是嵌套在style属性的字符串内容中,absUrl()这类方法自然没法直接识别到它。咱们换个思路,先拿到style的内容,再从中把URL抠出来就行:

解决方案代码示例

Document pages = Jsoup.connect(url).get();
// 精准选中目标span(用class+style属性筛选,避免误选其他元素)
Element targetSpan = pages.selectFirst("span.news-img[style]");

if (targetSpan != null) {
    // 获取style属性的完整字符串
    String styleContent = targetSpan.attr("style");
    
    // 用正则表达式匹配url()里的内容
    Pattern urlPattern = Pattern.compile("url\\((.*?)\\)");
    Matcher matcher = urlPattern.matcher(styleContent);
    
    if (matcher.find()) {
        // 提取出URL,顺便去掉可能存在的引号(有些网站会写url("xxx")或url('xxx'))
        String imgUrl = matcher.group(1).replaceAll("[\"']", "");
        System.out.println("提取到的图片URL:" + imgUrl);
    } else {
        System.out.println("未找到图片URL");
    }
} else {
    System.out.println("未找到目标span元素");
}

简单解释下原理:

  1. 先通过selectFirst("span.news-img[style]")精准定位到目标元素,比只选span[style]更靠谱,不会拿到其他无关的带style的span;
  2. 用attr("style")获取到整个style属性的文本内容;
  3. 正则表达式url\((.*?)\)专门匹配url()括号里的内容,.*?是非贪婪匹配,能准确捕获到URL;
  4. 最后用replaceAll("[\"']", "")去掉URL可能带的单引号或双引号,得到纯净的地址。

之前你试的absUrl()方法,是用来处理像src、href这种直接存储URL的属性的,对嵌套在style里的URL不适用,所以才没效果哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:36