如何使用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元素"); }
简单解释下原理:
- 先通过
selectFirst("span.news-img[style]")精准定位到目标元素,比只选span[style]更靠谱,不会拿到其他无关的带style的span; - 用
attr("style")获取到整个style属性的文本内容; - 正则表达式
url\((.*?)\)专门匹配url()括号里的内容,.*?是非贪婪匹配,能准确捕获到URL; - 最后用
replaceAll("[\"']", "")去掉URL可能带的单引号或双引号,得到纯净的地址。
之前你试的absUrl()方法,是用来处理像src、href这种直接存储URL的属性的,对嵌套在style里的URL不适用,所以才没效果哦~
内容的提问来源于stack exchange,提问作者Estergon
相关产品推荐
相关产品推荐

