获取图片分为两步:从 HTML 提取地址,再按地址下载。搜索结果能显示图片不代表你拥有使用许可;缩略图、原图和页面地址也可能不同。

先解析自己准备的页面

使用 Java HTML 解析教程 的 Maven 依赖。保存 ImageLinksDemo.java,与 HtmlDemo 放在同一个目录:

import org.jsoup.Jsoup;
public class ImageLinksDemo {
public static void main(String[] args) {
var document = Jsoup.parse("""
<img src="/images/demo.jpg" alt="示例图片">
<img data-src="/images/lazy.png">
""", "https://example.com/");
for (var image : document.select("img")) {
String attr = image.hasAttr("src") ? "src" : "data-src";
String url = image.absUrl(attr);
if (!url.isBlank()) System.out.println(url);
}
}
}
Terminal window
mvn package
java -cp 'target/classes;target/dependency/*' ImageLinksDemo

预期得到 /images/demo.jpg 和 /images/lazy.png 对应的两个完整地址。真实页面还可能使用 srcset、picture 或 JavaScript 加载,需检查响应 HTML 后再决定解析方式。

下载前检查什么

确认地址协议、响应状态、Content-Type 和大小上限。保留查询参数,它们可能包含图片转换、签名或有效期;删除参数不保证得到原图,可能使地址失效。

旧 Bing/百度抓包接口及固定 class 选择器依赖内部实现,不作为这里的可复制步骤。需要搜索结果时,使用平台提供并允许使用的 API;下载失败、鉴权失败和没有图片分别处理。

若在服务器接受用户提供的 URL,还需要限制可访问主机和重定向,防止请求内网地址。不要直接把原文件名当本地路径,也不要把搜索结果中的 HTML 不经处理插入页面。

参考:jsoup URL 处理。