本文作者:程序员飞云
抓取bing图片
建议抓取搜索引擎的图片,大部分的图片素材网站都有版权保护,抓取图片容易被封禁账号、IP。
在F12中,下拉图片的时候会发送请求,这样就可以看到图片数据接口了


接口如下:https://cn.bing.com/images/async?q=%s&mmasync=1
如果直接请求会发现宽度、高度都被限制了,所以获取这个url之后需要移除后面参数
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标签里面的属性。

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); }
评论