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 ...
随机推荐
- LINQ to SQL语句(12)之Delete和使用Attach
1.简单形式 说明:调用DeleteOnSubmit方法即可. OrderDetail orderDetail = db.OrderDetails.First (c => c.OrderID = ...
- 探索DOMNode
实现代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- 记一SQL部署问题
在部署环境时,不同的环境可能会有一些不同步,而个人遇到的问题就是在开发环境中表中均有字段 BestCaseId 和 RiskId 字段,生产环境中目前只有 BestCaseId 字段,新搭建的测试环境 ...
- 总结shell
总结shell里面一些初学者不容易懂得点,因为我本身就是初学者,所以有一些知识点是不容易通过字面意思理解的,下面写在这里. (便于理解的一个方法就是举例子)举个例子就是哪些容易学,哪些不容易理解:丁是 ...
- php rsa加密解密实例
1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...
- Apache Shiro系列(1)
Apache Shiro是啥呢,安全框架. 360百科是这么描述的: Apache Shiro(日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架, ...
- Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)
package com; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; i ...
- ABP 初探 之 权限设计
大.小项目都要设计权限,都想设计一个通用的权限,把权限做的比较复杂,现在了解了ABP的设计思路,觉得设计很简单,但实现方法与思路耐人寻味. 本篇只介绍AbpPermissions的数据库设计,其它表结 ...
- nhibernate 中 lazy="no-proxy" 时的问题
在 nhibernate,如果将实体的一个关联属性配置为 lazy="no-proxy",那么,从其他属性计算出来的属性不能正确更新.例如,将以下代码中 Foo.Bar 配置为 l ...
- discuz 3.x 核心文件class_core.php解析
class_core.php是discuz 3.x的核心文件,几乎所有PHP脚本都有引用此文件初始化论坛运行环境.以下解析引用3.2版discuz. line 12-15:常量定义IN_DISCUZ: ...