先看看抓取的结果。

[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]

Java爬取 百度图片Google图片Bing图片相关推荐

  1. java爬虫黑马百度云,Java爬虫小Demo java爬取百度风云榜数据

    Java爬虫小Demo java爬取百度风云榜数据 很简单的一个小例子,使用到了java的爬虫框架 jsoup ,一起啦看看实现的方法吧! 相关推荐:Python爬虫实战 python爬虫爬取百度风云 ...

  2. [JAVA]爬取百度关于关键字的诗句

    [JAVA]爬取百度关于关键字的诗句 寒假不想写作业,学完java基础的我手痒痒,于是就有了这篇菜逼吧初作 仅供学习和交流,严禁用于商业用途 先要获得有哪些关键字可以爬,在此之前,写一个Get函数,来 ...

  3. Java爬取百度图片人脸识别下载高颜值小姐姐图片

    前言: 最近想下载一些比较好看的妹子图片,但又不想去网上一张张的看,于是就想通过爬取图片进行人脸识别下载. 1.首先:在爬取图片时,通过Java请求时会遇到百度安全认证机制,在这里可以模拟浏览器的请求 ...

  4. Java爬取王者荣耀全英雄全皮肤图片

    编码前准备: 导入maven依赖: <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency> ...

  5. 百度贴吧界面html程序代码,python爬虫例题:爬取百度贴吧评论区图片和视频

    百度贴吧是全球最大的中文交流平台,你是否跟我一样,有时候看到评论区的图片想下载呢?或者看到一段视频想进行下载呢? 今天,本期Python教程带大家通过搜索关键字来获取评论区的图片和视频. [二.项目目 ...

  6. java爬取百度贴吧所有用户头像

    第一次写爬虫,觉得蛮有意思的 写了个爬取贴吧用户头像的工具类 如有问题,多多指教~ 爬虫工具类 package com.yq.spider;import java.io.BufferedInputSt ...

  7. java爬取百度贴吧吧内所有帖子数据(图文详解)

    因为个人需要爬取某个吧内的所有帖子并保存下来,但是无奈不会写python,于是就想到了利用java的jsoup去做爬虫,尝试了多次后终于获取成功,主要遇到的问题还是百度的反爬机制,解决了后,整理一篇文 ...

  8. 转载:爬取百度图库中猫的图片

    文章目录 综合 步进版 转载 仅作为记录,代码均可运行 综合 运行后,输入想爬取的页数: 输入1--爬取30张 输入2--爬取60张 输入3--爬取90张 import requests from l ...

  9. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

最新文章

  1. Linux下安装搜狗拼音
  2. BZOJ3262: 陌上花开(cdq分治)
  3. C++之map插入数据相同的key不能覆盖value解决办法
  4. python如何实现人工智能应用锁_如何清除应用锁的数据库
  5. 技术动态 | 事理图谱,下一代知识图谱
  6. Spring2..5整合Ehacahe
  7. 树言树语:AIR的 应用方向在哪里?
  8. 十年测开如何理解自动化测试里的数据驱动、关键字驱动思路
  9. arcgis for android 无法加载本地jpg影像解决办法
  10. 用python直接调用asr技术_python中asr
  11. 为什么使用 adapter模式
  12. android 图片 写入文件格式,android实现将位置信息写入JPEG图片文件
  13. arthas:jvm调优神器
  14. drools规则引擎使用文档
  15. android 5.0 开启网卡 权限请求,Aurora Droid | F-Droid - Free and Open Source Android App Repository...
  16. Illustrator CC 2019for Mac完美直装版无需破解
  17. MYSQL数据库高级SQL语句详解
  18. java实现token 过期,java – SQS ExpiredToken:请求中包含的安全令牌是过期状态码:403...
  19. OCI(Ocean Cycle) 海洋循环回收认证是什么?
  20. 华为云图像标签使用之智慧相册

热门文章

  1. 探究项目管理中的棘轮效应(转)
  2. Nirvana Chain 「为应用而生」Lily技术分享--节点机制 |棘轮效应上涨的经济模型
  3. 100G超长距离传输模块,彩光模块相关知识
  4. 对客户关系管理的误解有哪些
  5. 日历组件带农历及事件标记,绑定点击事件
  6. (D16)Python-文件操作
  7. 删除鼠标右击的Open Folder as PyCharm和其他相同情况快捷键
  8. 零售门店管理的技巧 收银软件 会员管理体系 零售店收银 门店管理软件
  9. 音视频学习-H264帧基础知识
  10. [展览人秘籍]除了展会会刊(参展商名录)还能这样找客户