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计算(文件去重)
  1. public class BaiduImageCrawler extends ImageCrawler {  
  2.       
  3.     //tn:resultjsonavatarnew  
  4.     //ie:utf-8 字符编码(ie输入 oe输出)  
  5.     //word:美女 搜索关键字  
  6.     //pn:60 开始条数  
  7.     //rn:30 显示数量  
  8.     //z:0 尺寸(0全部尺寸 9特大 3大 2中 1小)  
  9.     //width:1024 自定义尺寸-宽  
  10.     //height:768 自定义尺寸-高  
  11.     //ic:0 颜色(0全部颜色 1红色 2黄色 4绿色 8青色 16蓝色 32紫色 64粉色 128棕色 256橙色 512黑色 1024白色 2048黑白)  
  12.     //s:0 3头像图片  
  13.     //face:0 1面部特写  
  14.     //st:-1 -1全部类型 1卡通画 2简笔画  
  15.     //lm:-1 (6动态图片 7静态图片)  
  16.     //gsm:3c pn值的十六进制数  
  17.     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";  
  18.     private static final int PAGE_SIZE = 60;  
  19.     private static final String IMAGE_URL_REG = "\"objURL\":\"(https?://[^\"]+)\"";  
  20.     private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);  
  21.       
  22.     @Override  
  23.     public String getSearchUrl(String keyword, int page) {  
  24.         int begin = page * PAGE_SIZE;  
  25.         return String.format(BAIDU_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE, Integer.toHexString(begin));  
  26.     }  
  27.   
  28.     @Override  
  29.     public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {  
  30.         int count = 0;  
  31.         Matcher matcher = IMAGE_PATTERN.matcher(data);  
  32.         while (matcher.find()) {  
  33.             queue.offer(matcher.group(1));  
  34.             count++;  
  35.         }  
  36.         return count;  
  37.     }  
  38.   
  39. }  

 

Java代码  收藏代码
  1. public class GoogleImageCrawler extends ImageCrawler {  
  2.       
  3.     //tbm=isch  
  4.     //q=美女 搜索关键字  
  5.     //ijn=0 页码(***Google只提供到0到8页数据!)  
  6.     //start=0 开始条数  
  7.     //tbs=isz:l 搜索条件  
  8.     //  尺寸  
  9.     //  tbs=isz:l 大  
  10.     //  tbs=isz:m 中  
  11.     //  颜色  
  12.     //  tbs=ic:color 彩色  
  13.     //  tbs=ic:gray 黑白  
  14.     //  tbs=ic:trans 透明  
  15.     //  类型  
  16.     //  tbs=itp:face 脸部特写  
  17.     //  tbs=itp:photo 照片  
  18.     //  tbs=itp:clipart 剪贴画  
  19.     //  tbs=itp:lineart 素描画  
  20.     //  tbs=itp:animated 动画  
  21.     //  条件组合  
  22.     //  tbs=isz:l,ic:color,itp:face  
  23.     private static final String GOOGLE_IMAGE_SEARCH_URL = "https://www.google.com/search?tbm=isch&q=%s&ijn=%d&start=%d&tbs=isz:l";  
  24.     private static final int PAGE_SIZE = 100;  
  25.     private static final String IMAGE_URL_REG = "\"ou\":\"(https?://[^\"]+)\"";  
  26.     private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);  
  27.       
  28.     @Override  
  29.     public String getSearchUrl(String keyword, int page) {  
  30.         int begin = page * PAGE_SIZE;  
  31.         return String.format(GOOGLE_IMAGE_SEARCH_URL, keyword, page, begin);  
  32.     }  
  33.   
  34.     @Override  
  35.     public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {  
  36.         int count = 0;  
  37.         Matcher matcher = IMAGE_PATTERN.matcher(data);  
  38.         while (matcher.find()) {  
  39.             queue.offer(matcher.group(1));  
  40.             count++;  
  41.         }  
  42.         return count;  
  43.     }  
  44. }  

 

Java代码  收藏代码
    1. public class BingImageCrawler extends ImageCrawler {  
    2.   
    3.     //async=content  
    4.     //q=美女 搜索关键字  
    5.     //first=118 开始条数  
    6.     //count=35 显示数量  
    7.     private static final String BING_IMAGE_SEARCH_URL = "http://www.bing.com/images/async?async=content&q=%s&first=%d&count=%d";  
    8.     private static final int PAGE_SIZE = 35;  
    9.     private static final String IMAGE_URL_REG = "imgurl:&quot;(https?://[^,]+)&quot;";  
    10.     private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);  
    11.       
    12.     @Override  
    13.     public String getSearchUrl(String keyword, int page) {  
    14.         int begin = page * PAGE_SIZE;  
    15.         return String.format(BING_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE);  
    16.     }  
    17.   
    18.     @Override  
    19.     public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {  
    20.         int count = 0;  
    21.         Matcher matcher = IMAGE_PATTERN.matcher(data);  
    22.         while (matcher.find()) {  
    23.             queue.offer(matcher.group(1));  
    24.             count++;  
    25.         }  
    26.         return count;  
    27.     }  
    28.   
    29. }  

 

posted @ 2017-04-20 14:54  国强则无惧!  阅读(1573)  评论(0编辑  收藏  举报