Java爬取 百度图片&Google图片&Bing图片

先看看抓取的结果。

[b]抓关键字“美女”的百度图片:[/b]
[img]http://dl2.iteye.com/upload/attachment/0119/1205/e97b889b-d098-3e5b-9055-8f9809fc7732.png[/img]
[b]抓关键字“美女”的Google图片:[/b]
[img]http://dl2.iteye.com/upload/attachment/0119/1211/9f038ce3-9d8b-3d62-a2d4-18b5c0925d37.png[/img]
[b]抓关键字“美女”的Bing图片:[/b]
[img]http://dl2.iteye.com/upload/attachment/0119/1723/16807902-3fa1-380f-9438-cfc27c0764e0.png[/img]

8个Java类:
[list]
[*]Startup.java - main函数
[*]ImageCrawler.java - Crawler基类
[*]BaiduImageCrawler.java - 百度图片的具体爬取实现
[*]GoogleImageCrawler.java - Google图片的具体爬取实现
[*]BingImageCrawler.java - Bing图片的具体爬取实现
[*]ImageWorker.java - 定时从Queue中取图片URL下载(默认开启100个)
[*]ImageDownloader.java - 图片下载
[*]MD5Checksum.java - 文件MD5计算(文件去重)
[/list]
以下是三个搜索引擎的具体抓取实现。完整的代码:[url=http://dl.iteye.com/topics/download/a585d30c-ff73-3a61-a8f6-c26d9700a238]点击下载[/url]
public class BaiduImageCrawler extends ImageCrawler {

//tn:resultjsonavatarnew
//ie:utf-8 字符编码(ie输入 oe输出)
//word:美女 搜索关键字
//pn:60 开始条数
//rn:30 显示数量
//z:0 尺寸(0全部尺寸 9特大 3大 2中 1小)
//width:1024 自定义尺寸-宽
//height:768 自定义尺寸-高
//ic:0 颜色(0全部颜色 1红色 2黄色 4绿色 8青色 16蓝色 32紫色 64粉色 128棕色 256橙色 512黑色 1024白色 2048黑白)
//s:0 3头像图片
//face:0 1面部特写
//st:-1 -1全部类型 1卡通画 2简笔画
//lm:-1 (6动态图片 7静态图片)
//gsm:3c pn值的十六进制数
private static final String BAIDU_IMAGE_SEARCH_URL = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=%s&pn=%d&rn=%d&z=3&ic=0&s=0&face=0&st=-1&lm=-1&gsm=%s";
private static final int PAGE_SIZE = 60;
private static final String IMAGE_URL_REG = "\"objURL\":\"(https?://[^\"]+)\"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);

@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(BAIDU_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE, Integer.toHexString(begin));
}

@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}

}

public class GoogleImageCrawler extends ImageCrawler {

//tbm=isch
//q=美女 搜索关键字
//ijn=0 页码(***Google只提供到0到8页数据!)
//start=0 开始条数
//tbs=isz:l 搜索条件
// 尺寸
// tbs=isz:l 大
// tbs=isz:m 中
// 颜色
// tbs=ic:color 彩色
// tbs=ic:gray 黑白
// tbs=ic:trans 透明
// 类型
// tbs=itp:face 脸部特写
// tbs=itp:photo 照片
// tbs=itp:clipart 剪贴画
// tbs=itp:lineart 素描画
// tbs=itp:animated 动画
// 条件组合
// tbs=isz:l,ic:color,itp:face
private static final String GOOGLE_IMAGE_SEARCH_URL = "https://www.google.com/search?tbm=isch&q=%s&ijn=%d&start=%d&tbs=isz:l";
private static final int PAGE_SIZE = 100;
private static final String IMAGE_URL_REG = "\"ou\":\"(https?://[^\"]+)\"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);

@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(GOOGLE_IMAGE_SEARCH_URL, keyword, page, begin);
}

@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}
}

public class BingImageCrawler extends ImageCrawler {

//async=content
//q=美女 搜索关键字
//first=118 开始条数
//count=35 显示数量
private static final String BING_IMAGE_SEARCH_URL = "http://www.bing.com/images/async?async=content&q=%s&first=%d&count=%d";
private static final int PAGE_SIZE = 35;
private static final String IMAGE_URL_REG = "imgurl:"(https?://[^,]+)"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);

@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(BING_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE);
}

@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}

}


抓取过程的log:
[img]http://dl2.iteye.com/upload/attachment/0119/1232/2ad3263c-5dce-3d1e-ae39-8d7c12fdad9e.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0119/1234/88ecd1a4-bf7a-396a-b464-29cb2a3e201d.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0119/1725/6342a50c-893a-3418-b92e-686b2a87e910.png[/img]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值