就是写的个小程序,用于记录一下,方便后续查看,首先感谢下面这个博客,从这篇文章衍生的吧,大家可以学习下:

http://www.cnblogs.com/lichenwei/p/4610298.html

读了这边文章,觉得很有意思,就模仿着写了个,从百度图片所有并下载到本地,主要思路是一样的。

贴下代码:

package com.guo.common;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter; public class IOUtils
{
/*
* 唯一实例
*/
private static IOUtils instance; /**
* 单例模式
* @return IOUtils实例
* @author count 2015-7-8
*/
public static IOUtils getIOUtilsInstance()
{
if (null != instance)
{
return instance;
}
synchronized (IOUtils.class)
{
if (null == instance)
{
instance = new IOUtils();
} return instance;
}
} /**
* 将inputStream转换成String
* @param is inputStream
* @return 转换后的Sring
*
* @return String [返回类型说明]
* @author count 2015-7-8
*/
public String conventInputStream2String(InputStream is)
{
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //线程安全 Stringbuilder 线程非安全 StringBuffer
StringBuilder sb = new StringBuilder(); try
{
String line = "";
while (null != (line = br.readLine()))
{
sb.append(line);
}
}
catch (Exception e)
{
System.out.println(e);
}
finally
{
try
{
is.close();
br.close();
}
catch (Exception e2)
{
System.out.println(e2);
}
} return sb.toString();
} /**
* 将inputStream写成文件保存在本地
* @param is inputStream流
* @param path 文件路径
* @param fileName 文件名
*
* @return void [返回类型说明]
* @author count 2015-7-8
*/
public void conventInpputStream2File(InputStream is, String path, String fileName)
{
File file = new File(path); if (!file.exists() || !file.isDirectory())
{
file.mkdirs();
} file = new File(path + fileName); OutputStream os = null; try
{
os = new FileOutputStream(file); int length;
byte[] data = new byte[2048]; while ((length = is.read(data)) != -1)
{
os.write(data, 0, length);
} }
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
os.close();
}
catch (Exception e2)
{
}
}
}
}

  

package com.guo.main;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.guo.common.IOUtils; public class DownPicFromBaidu
{
public static void main(String[] args)
{
/*
* 搜索关键字
*/
String wordKey = "girl"; /*
* inputSream
*/
InputStream is = null; try
{
String urlencodeKewy = URLEncoder.encode(wordKey, "GBK");
//百度图片url,返回图片的json数组
String baiduImageUrl = "http://image.baidu.com/i?tn=baiduimagejson&width=&height=&word="
+ urlencodeKewy + "&rn=100&pn=2";
URL url = new URL(baiduImageUrl); HttpURLConnection connect = (HttpURLConnection) url.openConnection(); //获取url对应的inputStream
is = connect.getInputStream(); //转换后的String
String baiduImageStr = IOUtils.getIOUtilsInstance()
.conventInputStream2String(is); JSONObject baiduImageJson = JSONObject.parseObject(baiduImageStr); JSONArray imageDataJsonArray = baiduImageJson.getJSONArray("data");
System.out.println(imageDataJsonArray.toString()); for (int i = 0; i < imageDataJsonArray.size() - 1; i++)
{
JSONObject imageJosn = (JSONObject) imageDataJsonArray.get(i); System.out.println("一共查到" + (imageDataJsonArray.size() - 1)
+ "张图片。"); url = new URL(imageJosn.getString("objURL")); try
{
connect = (HttpURLConnection) url.openConnection();
is = connect.getInputStream(); System.out.println("正在下载第" + i + "张,该图片的json流是"
+ imageJosn.getString("objURL"));
System.out.println("图片名称:" + imageJosn.getString("di")); IOUtils.getIOUtilsInstance().conventInpputStream2File(is,
"c:/images/" + wordKey + "/",
imageJosn.getString("di") + "."
+ imageJosn.getString("type"));
}
catch (IOException ioe)
{
System.out.println("正在下载第" + i + "张,该图片的json流是"
+ imageJosn.getString("objURL"));
System.out.println("图片名称:" + imageJosn.getString("di")); IOUtils.getIOUtilsInstance().conventInpputStream2File(is,
"c:/images/" + wordKey + "/",
imageJosn.getString("di") + "."
+ imageJosn.getString("type"));
} } }
catch (Exception e)
{
System.out.println(e);
}
}
}

  

可能还有不完善的地方,希望大家指出,继续完善。

java实现批量下载百度图片搜索到的图片的更多相关文章

  1. java+文件批量下载

    这篇文章主要介绍了Java实现批量下载选中文件功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下 1.在action中定义变量 private List<String> downLoa ...

  2. 用 Python 批量下载百度图片

    ​ 为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地 ...

  3. Java实现批量下载《神秘的程序员》漫画

    上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...

  4. Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件

    题目为:  有一百个图片文件,它们的地址都是http://down.fengge.com/img/1.pnghttp://down.fengge.com/img/2.png…一直到http://dow ...

  5. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  6. Java实现批量下载选中文件功能

    1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...

  7. 利用bing图片搜索接口开发图片搜索应用程序

    概述:通过bing的图片搜索引擎,开发自己的图片搜索应用程序.bing的图片搜索接口是收费的,但是初次注册使用,key可以免费试用30天 程序运行效果如下 一,代码如下 static SearchRe ...

  8. 基于Java实现批量下载网络图片

    昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆Json数据,让我帮忙处理下,反正闲着也没事干,就帮忙写了.(很简单的一个功能,随手记录下,刚好填补下最 ...

  9. java+web+批量下载文件

    JavaWeb 文件下载功能 文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端,所以文件下载需要IO技术将服务器端的文件读取到,然后写到response缓冲区中,然后再下载到个人客户端. 1 ...

随机推荐

  1. jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——词法解析

    jQuery源码9600多行,而Sizzle引擎就独占近2000行,占了1/5.Sizzle引擎.jQuery事件机制.ajax是整个jQuery的核心,也是jQuery技术精华的体现.里面的有些策略 ...

  2. AJAX 详解注释很全来自互联网

    1: //用户名校验的方法 2: //这个方法使用XMLHTTPRequest对象进行AJAX的异步数据交互 3: var xmlhttp; 4: function verify(){ 5: //1. ...

  3. 一个简单的inno setup模板

    一.模板代码 基本功能包括多路径安装.多语言.自定义图标. [Setup] ShowLanguageDialog=yes AppCopyright=Copyright Reserved(C) , 36 ...

  4. 发布 Rafy 源码到 GitHub

      最近项目组开始使用 Git 来作为源码管理.我今天就顺便把 Rafy 的源码也迁移到了 github 上,方便大家使用.这是项目的地址:https://github.com/zgynhqf/raf ...

  5. 【Win10开发】绘制静态UI

    相信经历过Windows Insider的人对下面这个图都不会陌生,偶然看见邹欣老师领导的微软团队写了篇用xaml绘制这个静态页面,那咱也来亲手实验一番.唔...请做和放宽! 首先我们来看看xaml代 ...

  6. 神奇的CSS3按钮特效

    点击这里查看效果 以下是源代码: <!doctype html> <html> <!-- author: @simurai --> <head> < ...

  7. C# ~ 从 委托事件 到 观察者模式 - Observer

    委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...

  8. 详解Spring框架AOP(面向切面编程)

    最近在学习AOP,之前一直很不明白,什么是AOP?为什么要使用AOP,它有什么作用?学完之后有一点小小的感触和自己的理解,所以在这里呢就跟大家一起分享一下 AOP(Aspect-Oriented Pr ...

  9. centos安装禅道的步骤

    1.下载 XAMPP 套件: https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/stats/timeline  下载的文件是 xam ...

  10. SqlServer-无限递归树状图结构设计和查询

    在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...