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


接口如下: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是一个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);
}
贡献者
flycodeu
版权所有
版权归属:flycodeu