最近想下載一些圖片,在一次一次另存為之后實在受不了了,于是寫了一個小程序直接把圖片下載下來
現把代碼貼出,以供參考吧
import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import us.codecraft.webmagic.Page;import us.codecraft.webmagic.Spider;import java.io.DataInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;/** * 下載百度圖片 * * @author bruce_q * @create 2017-02-03 11:12 **/public class DownloadPicture extends BasePRocessor{ static List<String> urls; static List<String> names; public void setUrls(List<String> urls) { this.urls = urls; } public void setNames(List<String> names) { this.names = names; } /** * 下載圖片 * author:bruce_q * 2017-2-5 20:47 * * @param urlList * @param nameList */ private void downloadPicture(ArrayList<String> urlList,ArrayList<String> nameList,String key) { URL url = null; for (int i=0;i<urlList.size();i++) { try { url = new URL(urlList.get(i)); DataInputStream dataInputStream = new DataInputStream(url.openStream()); String imageName = i + ".jpg"; File file=new File("d://pic//"+key); //設置下載路徑 if(!file.isDirectory()){ file.mkdirs(); } FileOutputStream fileOutputStream = new FileOutputStream(new File("d://pic//"+ key +"//"+ imageName.trim())); byte[] buffer = new byte[1024]; int length; while ((length = dataInputStream.read(buffer)) > 0) { fileOutputStream.write(buffer, 0, length); } dataInputStream.close(); fileOutputStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } @Override public void process(Page page) { List<String> url_list = new ArrayList<>(); List<String> name_list = new ArrayList<>(); JSONObject jsonObject = (JSONObject) JSONObject.parse(page.getRawText()); JSONArray data = (JSONArray) jsonObject.get("data"); for(int i=0;i<data.size();i++){ String url = (String) data.getJSONObject(i).get("thumbURL"); String name = (String) data.getJSONObject(i).get("fromPageTitleEnc"); if(url!=null){ url_list.add(url); name_list.add(name); } } setUrls(url_list); setNames(name_list); } public static void main(String[] args) { String key = "乘風破浪"; //百度圖片 關鍵詞 DownloadPicture downloadPicture = new DownloadPicture(); ArrayList<String> nameList = new ArrayList<>(); ArrayList<String> urlList = new ArrayList<>(); for(int i=0;i<2;i++){ //控制爬取頁數,一頁30張圖片 String url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&queryWord="+key+"&word="+key+"&pn="+i*3+"0"; Spider.create(new DownloadPicture()) .addUrl(url) .run(); urlList.addAll(urls); nameList.addAll(names); } downloadPicture.downloadPicture(urlList,nameList,key); }}圖片是能直接下載下來,誰有好的關鍵字(你懂得(*^__^*) )記得留言
新聞熱點
疑難解答