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 ...
随机推荐
- 关于SSMS显示select出来的数据行的疑问
调试存储过程时,往往可以用print将存储过程中的变量print出来, 但是print出来的字符串有一定长度限制,刚才专门试了一下,应该是4000个字符 如果超过4000个字符,超长的字符会被自动截断 ...
- Android监听系统短信数据库变化-提取短信内容
由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...
- GUI 和 GUILayout 的区别
GUI 和 GUILayout 的区别 A~ GUI是Unity中的基础控件类,其中包含了常用的GUI控件,列如Button,Label,PasswordField,slider,Window等等~ ...
- php 数组动态添加实现代码(最土团购系统的价格排序)
最近在实现最土团购系统的价格排序功能,需要对$oc数组进行扩展,经过测试用下面的方法即可. 核心代码如下: <?php $now=time(); $oc = array( 'team_type' ...
- jquery css属性练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 如何实现一个php框架系列文章【1】如何组织文件
1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录 uct/ ...
- 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 当使用外部JavaScript库或新的宿主API时,你需要一个声明文件(.d.t ...
- PHP页面跳转(PHP笔记)
目前学习到三种方法: 1.调用js跳转 2.header()跳转 3.调用HTML方法实现 因为一直在自己学习没有进入项目,并不知道哪个更常使用. 调用js跳转. <?php //这里是跳转方法 ...
- jquery animate 动画效果使用解析
animate的意思是:使有生气:驱动:使栩栩如生地动作:赋予…以生命作为形容词:有生命的:活的:有生气的:生气勃勃的 先看动画效果:http://keleyi.com/keleyi/phtml/jq ...
- ios页面过渡效果插件Kontext
效果体验:http://keleyi.com/keleyi/phtml/html5/28.htm 以下是代码: <!doctype html> <html> <head& ...