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

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. TeamCity : 安装 Agent

    笔者在前文中介绍了 TeamCity Server 的安装过程,本文介绍在 Ubuntu Server 14.04 中安装 TeamCity Agent.Ubuntu Server 上已经创建了用户 ...

  2. [WCF编程]10.操作:单向操作

    一.单向操作概述 WCF提供了单向操作,一旦客户端调用,WCF会生成一个请求,但没有相关的应答信息返回给客户端.所以,单向操作是不能有返回值,服务抛出的任何异常都不会传递给客户端. 理想情况下,一旦客 ...

  3. 用eclipse做项目中常遇到的问题-如何创建并读取properties文件

    在用eclipse做项目开发的时候我们常常会将一些重要的内容写在配置文件里面, 特别是连接数据库的url,username,password等信息,我们常常会新建一个properties文件将所有信息 ...

  4. JAVA 8 Streams

    什么是Stream 首先要说的是,不要被它的名称骗了,这里的Stream跟JAVA I/O中的InputStream和OutputStream是两个不同的概念.Java 8中的Stream其实是函数式 ...

  5. PHP 小数点保留两位

    最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...

  6. 十一个行为模式之模板方法模式(Template Method Pattern)

    定义: 定义一个操作中算法的框架,并且将一部分操作延迟到子类当中.使得子类可以不改变一个算法的结构即可重新定义算法步骤. 结构图: AbstractClass:抽象方法类,定义了一些基本操作,这些操作 ...

  7. Linux(四)__javaee开发环境的搭建

    一.VMware tools 通过VMware tools来实现主机和VM共享文件,详细介绍 记得重启就能实现本机和虚拟机之间复制粘贴文件. 二.搭建java环境: 一般linux都会预装openjd ...

  8. SQLServer清空日志

      USE [master]  GO  ALTER DATABASE TRAVEL SET RECOVERY SIMPLE WITH NO_WAIT  GO  ALTER DATABASE TRAVE ...

  9. Entity Framework 中的Code First 中引入数据库函数

    1,在项目中添加CodeFirstStoreFunctions包: Install-Package EntityFramework.CodeFirstStoreFunctions 2,注册注册函数,F ...

  10. Deployment options

    Play applications can be deployed virtually anywhere: inside Servlet containers, as standalone serve ...