java实现批量下载百度图片搜索到的图片
就是写的个小程序,用于记录一下,方便后续查看,首先感谢下面这个博客,从这篇文章衍生的吧,大家可以学习下:
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实现批量下载百度图片搜索到的图片的更多相关文章
- java+文件批量下载
这篇文章主要介绍了Java实现批量下载选中文件功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下 1.在action中定义变量 private List<String> downLoa ...
- 用 Python 批量下载百度图片
为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地 ...
- Java实现批量下载《神秘的程序员》漫画
上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...
- Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件
题目为: 有一百个图片文件,它们的地址都是http://down.fengge.com/img/1.pnghttp://down.fengge.com/img/2.png…一直到http://dow ...
- java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩
现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...
- Java实现批量下载选中文件功能
1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...
- 利用bing图片搜索接口开发图片搜索应用程序
概述:通过bing的图片搜索引擎,开发自己的图片搜索应用程序.bing的图片搜索接口是收费的,但是初次注册使用,key可以免费试用30天 程序运行效果如下 一,代码如下 static SearchRe ...
- 基于Java实现批量下载网络图片
昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆Json数据,让我帮忙处理下,反正闲着也没事干,就帮忙写了.(很简单的一个功能,随手记录下,刚好填补下最 ...
- java+web+批量下载文件
JavaWeb 文件下载功能 文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端,所以文件下载需要IO技术将服务器端的文件读取到,然后写到response缓冲区中,然后再下载到个人客户端. 1 ...
随机推荐
- 开源网站.NETMVC+ Layui+SqlSugar+RestSharp
SugarSite一个前端支持移动端的企业网站,目前只支持了简单功能,后续还会加上论坛等. 源码GIT地址: https://github.com/sunkaixuan/SugarSite 技术介绍 ...
- Devexpress WPF Theme Editor 02
Devexpress WPF Theme Editor 01 对于上次我们生成的主题 开始添加到我们的项目中. 运行Visual Studio和打开一个WPF解决方案,你想申请的主题. 添加的主题集会 ...
- 兼容性背景颜色半透明CSS代码(不影响内部子元素)
如何简单兼容性的实现父元素是半透明背景色,而子元素不受影响. 兼容所有浏览器的背景颜色半透明CSS代码: background-color: rgba(, , , .); filter: progid ...
- sqlserver附加 mdf、ldf的方法(手记)
exec sp_attach_db 'bookstore','E:\homework\bookstore_Data.MDF','E:\homework\bookstore_Log.LDF' EXEC ...
- 配置文件(App.config文件)
1. 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是 co ...
- [Tool] SourceTree操作中遇到错误(Filename too long)的解决方案
[Tool] SourceTree操作中遇到错误(Filename too long)的解决方案 问题情景 使用SourceTree,可以方便开发人员使用图形化接口的Git指令来管理原始码.但是在Wi ...
- JavaScript中数组去除重复
方式一:常规模式 1.构建一个新的临时数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与临时数组对比 3.若临时数组中没有该元素,则存到临时数组中 //方式一: Array.p ...
- jQuery Mapael – 呈现动态的矢量地图
jQuery Mapael 是基于 Raphael.js 的一个 jQuery 插件,可以显示动态矢量地图.例如,使用 Mapael 可以显示国家能够点击的世界地图.此外,你可以用圈,方形或者图片来标 ...
- 钉钉js依赖库学习
看别人用的依赖库的好处在于,你知道有什么可以用,什么可以借鉴.(钉钉——协作桌面应用) PS:人最怕是不知道,而不是你不会. 1. jQuery 钉钉使用了1.9.1版本的jQuery,jQuery作 ...
- Javascript对象
这次的分享,主要还是想跟大家聊聊Javascript语言中很重要的概念之一,对象.为什么说之一呢?因为Javascript其他重要概念还包括:作用域 作用域链 继承 闭包 函数 继承 数组 ..... ...