Skip to content

在线抓取图片

约 583 字大约 2 分钟

SpringBoot爬虫

2025-03-04

本文作者:程序员飞云

本站地址:https://www.flycode.icu

抓取bing图片

建议抓取搜索引擎的图片,大部分的图片素材网站都有版权保护,抓取图片容易被封禁账号、IP。

在F12中,下拉图片的时候会发送请求,这样就可以看到图片数据接口了

image-20250122100919014
image-20250122100919014
image-20250122105155680
image-20250122105155680

接口如下:https://cn.bing.com/images/async?q=%s&mmasync=1

图片链接如下:https://tse2-mm.cn.bing.net/th/id/OIP-C.zmsX95yGGHMh9VDnPsNo7AHaF7?w=236&h=189&c=7&r=0&o=5&dpr=1.6&pid=1.7

如果直接请求会发现宽度、高度都被限制了,所以获取这个url之后需要移除后面参数

Jsoup

Jsoup官网

jsoup是一个Java库,可以简化处理HTML和XML。它提供了一个易于使用的API,用于使用DOM API方法、CSS和xpath选择器进行URL提取、数据解析、提取和操纵,可以通过网站解析dom接口,从而解析下载数据。

引入依赖

<!-- HTML 解析:https://jsoup.org/ -->  
<dependency>  
    <groupId>org.jsoup</groupId>  
    <artifactId>jsoup</artifactId>  
    <version>1.15.3</version>  
</dependency>

获取图片

String fetchUrl = String.format("https://cn.bing.com/images/async?q=%s&mmasync=1", searchText);
Document document;
try {
    document = Jsoup.connect(fetchUrl).get();
} catch (Exception e) {
    log.error(String.format("抓取图片失败,搜索关键词:%s", searchText));

}
// 3. 解析内容
Element div = document.getElementsByClass("dgControl").first();
Elements elements = div.select("img.mimg");
// 成功次数
int uploadCount = 0;
for (Element element : elements) {
    String fileUrl = element.attr("src");
    
}

但是这样存在问题,获取的图片不是原本的格式,清晰度有限,是缩略图。可以直接使用a标签里面的属性。

image-20250122135823929
image-20250122135823929
        String fetchUrl = String.format("https://cn.bing.com/images/async?q=%s&mmasync=1", searchText);
        Document document;
        try {
            document = Jsoup.connect(fetchUrl).get();
        } catch (Exception e) {
            log.error(String.format("抓取图片失败,搜索关键词:%s", searchText));
        }

        // 3. 解析内容
        Element div = document.getElementsByClass("dgControl").first();
        Elements elements = div.select(".iusc");
        // 成功次数
        int uploadCount = 0;
        for (Element element : elements) {
            String dataM = element.attr("m");
            String fileUrl;
            try {
                fileUrl = JSONUtil.parseObj(dataM).getStr("murl");
            } catch (Exception e) {
                log.error(String.format("图片链接解析失败,搜索关键词:%s", searchText));
                continue;
            }

            if (StrUtil.isBlank(fileUrl)) {
                log.error(String.format("图片链接为空,搜索关键词:%s", searchText));
                continue;
            }
        }

搜索百度图片

       String searchText = "旅游";
        String url = String.format("https://images.baidu.com/search/acjson?tn=resultjson_com&word=%s&pn=%s", searchText, 30);
        String resData = HttpUtil.get(url);
        JSONObject jsonObject = JSONUtil.parseObj(resData);
        JSONArray list = jsonObject.getJSONArray("data");
        for (int i = 0; i < list.size(); i++) {
            JSONObject res = list.get(i, JSONObject.class);
            String thumbURL = res.getStr("thumbURL");
            System.out.println(i + "=======" + thumbURL);
        }

贡献者

  • flycodeuflycodeu

公告板

2025-03-04正式迁移知识库到此项目