`
rensanning
  • 浏览: 3514001 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37479
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604323
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678071
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87257
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399816
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69067
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90474
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多
先看看抓取的结果。

抓关键字“美女”的百度图片:

抓关键字“美女”的Google图片:

抓关键字“美女”的Bing图片:


8个Java类:
  • Startup.java - main函数
  • ImageCrawler.java - Crawler基类
  • BaiduImageCrawler.java - 百度图片的具体爬取实现
  • GoogleImageCrawler.java - Google图片的具体爬取实现
  • BingImageCrawler.java - Bing图片的具体爬取实现
  • ImageWorker.java - 定时从Queue中取图片URL下载(默认开启100个)
  • ImageDownloader.java - 图片下载
  • MD5Checksum.java - 文件MD5计算(文件去重)

以下是三个搜索引擎的具体抓取实现。完整的代码:点击下载
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:&quot;(https?://[^,]+)&quot;";
	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:




  • 大小: 120 KB
  • 大小: 121.8 KB
  • 大小: 97.7 KB
  • 大小: 86.5 KB
  • 大小: 125.9 KB
  • 大小: 96.3 KB
2
0
分享到:
评论
2 楼 reafes 2017-04-13  
博主,如何修改代码以到达爬取其他关键字的目的啊,急求
1 楼 jahentao 2017-02-11  
运行成功,感谢博主,Google要用VPN,Bing好像不行,Bing Crawler Completed (0 images found).

相关推荐

Global site tag (gtag.js) - Google Analytics