先看看抓取的结果。
抓关键字“美女”的百度图片:
抓关键字“美女”的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:"(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:
- 大小: 120 KB
- 大小: 121.8 KB
- 大小: 97.7 KB
- 大小: 86.5 KB
- 大小: 125.9 KB
- 大小: 96.3 KB
分享到:
相关推荐
这个 Java 包可以使用抓取和解析 Google、Bing 和百度搜索结果。 随意 fork 这个存储库以添加更多后端。 该项目是 Java 7 中 SerpApi 的实现。此代码依赖 GSON 进行高效的 JSON 处理。 HTTP 响应被转换为 JSON ...
* 搜索引擎的应用非常广泛,如Google、Bing、Yahoo等都是搜索引擎的典型代表。 二、网络爬虫(Web Spider) * 网络爬虫是指一种可以自动地从互联网上收集信息的程序。 * 网络爬虫在搜索引擎中的作用是非常重要的,...
系统采用的是bing引擎,国内对谷歌和谐没有采用谷歌引擎。使用bing引擎爬取百度网盘关于关键字的信息,将结果页使用Jsoup解析后展示给用户,在登录后会自动统计搜索的关键词的个数,将最常搜索的三条记录展示给用户
Indexing - 百度-必应-谷歌 搜索引擎推送工具此工具利用「百度-必应-谷歌」站长工具或开放平台接口即时推送网站更新给搜索引擎,加快蜘蛛程序爬取与更新。此工具代码作者已经使用多年,同时作者正在探索 Swing/AWT ...
常见的爬虫有Google的Googlebot、Bing的Bingbot等。 2. R语言简介:R语言是一种流行的编程语言,主要用于统计分析、数据挖掘和数据可视化。R语言提供了强大的数据处理和分析能力,广泛应用于数据科学、人工智能和...
* 通用网络爬虫:可以爬取所有类型的网页,例如Google、Bing等搜索引擎的爬虫。 * 主题网络爬虫:专门爬取特定主题的网页,例如教育、娱乐、新闻等。 * 垂直网络爬虫:专门爬取特定领域的网页,例如医疗、金融、法律...
常见的搜索引擎如Google、Bing和百度等。 2. **爬虫技术**:搜索引擎的第一步是爬取网页,这通常由网络爬虫完成。爬虫会遵循超链接遍历互联网,抓取网页内容并存储在服务器上。了解HTTP协议、URL结构以及如何处理...
在“工具”方面,Google的开源项目Colossus和Microsoft的开源项目Bing Search API提供了了解大型搜索引擎如何工作的机会。此外,Elasticsearch是一个分布式、RESTful风格的搜索和分析引擎,常用于实时数据分析。它...
第二阶段是中期的搜索引擎技术,包括 Google、Yahoo 和 Bing 等;第三阶段是当前的搜索引擎技术,包括基于 Lucene 的搜索引擎技术。 二、Lucene 搜索引擎技术 Lucene 是一种基于 Java 的开源信息检索库,提供了一种...
从早期的FTP服务和Archie搜索工具,到后来的Yahoo、Lycos等早期的搜索引擎,再到现在的Google、Bing等。这些内容不但为我们提供了搜索引擎发展的时间线,也说明了搜索引擎技术不断进步与革新的历史背景。 最后,...
传统的搜索引擎如Google或Bing旨在为用户提供广泛的信息,涵盖各个主题。而垂直搜索引擎则专注于特定的领域或行业,如科技新闻、医学研究或购物平台的商品搜索。它们的目标是提供更专业、更精确的搜索结果。垂直搜索...
2. **研究现状**:当前,搜索引擎技术已经相当成熟,主要由大型科技公司如Google、Bing等主导。然而,这些系统通常过于复杂,对于学习和理解来说并不友好。简单搜索引擎的研究为初学者提供了切入点,便于理解搜索...