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:"(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;
- }
- }
Java爬取 百度图片Google图片Bing图片的更多相关文章
- JAVA爬取百度贴吧图片
package com.wang.xiaowei.utils; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.code ...
- 使用python爬取百度贴吧内的图片
1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...
- Python 爬虫练习: 爬取百度贴吧中的图片
背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...
- java爬取百度首页源代码
爬虫感觉挺有意思的,写一个最简单的抓取百度首页html代码的程序.虽然简单了一点,后期会加深的. package test; import java.io.BufferedReader; import ...
- 百度图片爬虫-python版-如何爬取百度图片?
上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...
- python 3 爬取百度图片
python 3 爬取百度图片 学习了:https://blog.csdn.net/X_JS612/article/details/78149627
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNight import jso ...
- Python爬虫实例(一)爬取百度贴吧帖子中的图片
程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...
- selenium+chrome浏览器驱动-爬取百度图片
百度图片网页中中,当页面滚动到底部,页面会加载新的内容. 我们通过selenium和谷歌浏览器驱动,执行js,是浏览器不断加载页面,通过抓取页面的图片路径来下载图片. from selenium im ...
随机推荐
- jmeter 脚本规范
总结了一下公司正在用 jmeter 脚本规范. 使用 jmeter 进行接口级测试, 随着接口增多以及业务逻辑越来越复杂, 导致 jmeter 脚本的维护会更加困难.针对实际使用中发现的问题进行一些规 ...
- mysql打不开表问题解决方案
做开发时候某一表怎么也打不开,数据也不多,网上查了按下面这篇文章完美解决,但是要记得用root登录mysql: 记一次MySQL中Waiting for table metadata lock的解决方 ...
- ORACLE不可见索引(Invisible Indexes)
不可见索引概念 不可见索引(Invisible Index)是ORACLE 11g引入的新特性.不可见索引是会被优化器忽略的不可见索引,除非在会话或系统级别上将OPTIMIZER_USE_INVISI ...
- QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...
- 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting
本杂记摘录自文章<开发 | 为什么说集成学习模型是金融风控新的杀手锏?> 基本内容与分类见上述思维导图. . . 一.机器学习元算法 随机森林:决策树+bagging=随机森林 梯度提升树 ...
- 如何编译linux第一个模块 hellomod.ko
Linux下的驱动程序也没有听上去的那么难实现,我们可以看一下helloworld这个例子就完全可以了解它的编写的方式! 我们还是先看一个这个例子,helloworld 1. [代码]hellowor ...
- 安装sphinx和coreseek
sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数 ...
- JLINK(SEGGER)灯不亮 USB不识别固件修复、clone修改
今天调SMT32插拔几下,JLINK竟然挂掉了网上找了这个教程,搞了半天才搞好,驱动没装好!WIN7系统,自动安装的驱动是GPS.COM10,郁闷,错误来的.应该是:atm6124.sys.要手动选择 ...
- Java中的List转换成JSON报错(一)
1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/ ...
- Linux显示USB设备
Linux显示USB设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsusb -tv /: Bus 08.Port 1: Dev 1, Class=ro ...