標籤:
就是寫的個小程式,用於記錄一下,方便後續查看,首先感謝下面這個部落格,從這篇文章衍生的吧,大家可以學習下:
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實現批量下載百度圖片搜尋到的圖片