先看看抓取的结果。

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. //tn:resultjsonavatarnew
  3. //ie:utf-8 字符编码(ie输入 oe输出)
  4. //word:美女 搜索关键字
  5. //pn:60 开始条数
  6. //rn:30 显示数量
  7. //z:0 尺寸(0全部尺寸 9特大 3大 2中 1小)
  8. //width:1024 自定义尺寸-宽
  9. //height:768 自定义尺寸-高
  10. //ic:0 颜色(0全部颜色 1红色 2黄色 4绿色 8青色 16蓝色 32紫色 64粉色 128棕色 256橙色 512黑色 1024白色 2048黑白)
  11. //s:0 3头像图片
  12. //face:0 1面部特写
  13. //st:-1 -1全部类型 1卡通画 2简笔画
  14. //lm:-1 (6动态图片 7静态图片)
  15. //gsm:3c pn值的十六进制数
  16. 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";
  17. private static final int PAGE_SIZE = 60;
  18. private static final String IMAGE_URL_REG = "\"objURL\":\"(https?://[^\"]+)\"";
  19. private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
  20. @Override
  21. public String getSearchUrl(String keyword, int page) {
  22. int begin = page * PAGE_SIZE;
  23. return String.format(BAIDU_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE, Integer.toHexString(begin));
  24. }
  25. @Override
  26. public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
  27. int count = 0;
  28. Matcher matcher = IMAGE_PATTERN.matcher(data);
  29. while (matcher.find()) {
  30. queue.offer(matcher.group(1));
  31. count++;
  32. }
  33. return count;
  34. }
  35. }
  1. public class GoogleImageCrawler extends ImageCrawler {
  2. //tbm=isch
  3. //q=美女 搜索关键字
  4. //ijn=0 页码(***Google只提供到0到8页数据!)
  5. //start=0 开始条数
  6. //tbs=isz:l 搜索条件
  7. //  尺寸
  8. //  tbs=isz:l 大
  9. //  tbs=isz:m 中
  10. //  颜色
  11. //  tbs=ic:color 彩色
  12. //  tbs=ic:gray 黑白
  13. //  tbs=ic:trans 透明
  14. //  类型
  15. //  tbs=itp:face 脸部特写
  16. //  tbs=itp:photo 照片
  17. //  tbs=itp:clipart 剪贴画
  18. //  tbs=itp:lineart 素描画
  19. //  tbs=itp:animated 动画
  20. //  条件组合
  21. //  tbs=isz:l,ic:color,itp:face
  22. private static final String GOOGLE_IMAGE_SEARCH_URL = "https://www.google.com/search?tbm=isch&q=%s&ijn=%d&start=%d&tbs=isz:l";
  23. private static final int PAGE_SIZE = 100;
  24. private static final String IMAGE_URL_REG = "\"ou\":\"(https?://[^\"]+)\"";
  25. private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
  26. @Override
  27. public String getSearchUrl(String keyword, int page) {
  28. int begin = page * PAGE_SIZE;
  29. return String.format(GOOGLE_IMAGE_SEARCH_URL, keyword, page, begin);
  30. }
  31. @Override
  32. public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
  33. int count = 0;
  34. Matcher matcher = IMAGE_PATTERN.matcher(data);
  35. while (matcher.find()) {
  36. queue.offer(matcher.group(1));
  37. count++;
  38. }
  39. return count;
  40. }
  41. }
    1. public class BingImageCrawler extends ImageCrawler {
    2. //async=content
    3. //q=美女 搜索关键字
    4. //first=118 开始条数
    5. //count=35 显示数量
    6. private static final String BING_IMAGE_SEARCH_URL = "http://www.bing.com/images/async?async=content&q=%s&first=%d&count=%d";
    7. private static final int PAGE_SIZE = 35;
    8. private static final String IMAGE_URL_REG = "imgurl:&quot;(https?://[^,]+)&quot;";
    9. private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
    10. @Override
    11. public String getSearchUrl(String keyword, int page) {
    12. int begin = page * PAGE_SIZE;
    13. return String.format(BING_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE);
    14. }
    15. @Override
    16. public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
    17. int count = 0;
    18. Matcher matcher = IMAGE_PATTERN.matcher(data);
    19. while (matcher.find()) {
    20. queue.offer(matcher.group(1));
    21. count++;
    22. }
    23. return count;
    24. }
    25. }

Java爬取 百度图片Google图片Bing图片的更多相关文章

  1. JAVA爬取百度贴吧图片

    package com.wang.xiaowei.utils; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.code ...

  2. 使用python爬取百度贴吧内的图片

    1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...

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

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

  4. java爬取百度首页源代码

    爬虫感觉挺有意思的,写一个最简单的抓取百度首页html代码的程序.虽然简单了一点,后期会加深的. package test; import java.io.BufferedReader; import ...

  5. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

  6. python 3 爬取百度图片

    python 3 爬取百度图片 学习了:https://blog.csdn.net/X_JS612/article/details/78149627

  7. Python 爬虫实例(1)—— 爬取百度图片

    爬取百度图片  在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNight import jso ...

  8. Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...

  9. selenium+chrome浏览器驱动-爬取百度图片

    百度图片网页中中,当页面滚动到底部,页面会加载新的内容. 我们通过selenium和谷歌浏览器驱动,执行js,是浏览器不断加载页面,通过抓取页面的图片路径来下载图片. from selenium im ...

随机推荐

  1. 傅里叶变换 - Fourier Transform

    傅里叶级数 傅里叶在他的专著<热的解析理论>中提出,任何一个周期函数都可以表示为若干个正弦函数的和,即: \[f(t)=a_0+\sum_{n=1}^{\infty}(a_ncos(n\o ...

  2. java socket 模拟im 即时通讯

    自己想了一下怎么实现,就写了,没有深究是否合理.更多处理没有写下去,例如收件人不在线,应该保存在数据库,等下一次连接的时候刷新map,再把数据发送过去,图片发送也没有做,也没有用json格式 sock ...

  3. 将FTP映射至Windows

    在经常使用ftp传输文件的环境中,每次上传和下载文件都需要重新连接然后登录是非常繁琐的一件事情.我们可以将FTP空间映射到本地磁盘空间,免去输入地址以及账号.密码.方便我们日常中文件的上传和下载. 1 ...

  4. 2_Add Two Numbers --LeetCode

    原题如下: 思路:在一个while中遍历两个链表,直到最长的链表为空,或者没有进位.每一步获取两个链表对应的结点的值a,b,然后相加a+b.如果上一步又进位,那就加a+b+1,若由于进位加1后还产生进 ...

  5. C++ string数据类型的实现

    #include <cstdlib> #include <cstring> class Mystring { public: Mystring(const char * pda ...

  6. 【memcache】windos下 memcache更改默认的端口和最大使用内存

    1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上 2>修改端口,如改为11200 3>分配内存, ...

  7. freemarker自定义标签报错(六)

    freemarker自定义标签 1.错误描述 freemarker.core.ParseException: Encountered "\"\u4f60\u597d\uff01\& ...

  8. freemarker之数组

    freemarker之数组 1.设计思路 (1)声明一个数组 (2)打印数组中的元素 2.设计源码 <#--freemarker数组--> <#assign nums=[12,34, ...

  9. 一种基于主板BIOS的身份认证方案及实现

    .分析AwardBIOSDOS工具cbrom cbrom的功能就是在BIOS文件中添加.删除与提取模块,以便满足用户自己的需求,用法如下: cbromBIOS文件名/参数模块名|RELEASE|EXT ...

  10. CSS的继承性与优先级

    一.CSS的继承性 在CSS中不可继承的属性:display.margin.padding.border.background.width.min-width.max-width.height.min ...