package com.dorra.jsoup; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.Scanner; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * 經過HTML解析實現圖片批量下載 * @author DorraChen * @version v1.0 * @date 2017年10月22日 上午11:36:55 */ public class HtmlJsoup { /** * 第一步:獲取頁面的源代碼; * 第二步:解析源代碼,含有圖片的標籤,再找到圖片標籤裏面的src; * 第三步:利用Java裏面的net包,網絡編程 * */ /** * 根據網頁和編碼獲取網頁內容和源代碼 * @param url * @param encoding */ public static String getHtmlResourceByUrl(String url,String encoding){ StringBuffer buffer = new StringBuffer(); URL urlObj = null; URLConnection uc = null; InputStreamReader in = null; BufferedReader reader = null; try { // 創建網絡鏈接 urlObj = new URL(url); // 打開網絡鏈接 uc = urlObj.openConnection(); // 建立輸入流 in = new InputStreamReader(uc.getInputStream(),encoding); // 建立一個緩衝寫入流 reader = new BufferedReader(in); String line = null; while ((line = reader.readLine()) != null) { // 一行一行追加 buffer.append(line+"\r\n"); } } catch (Exception e) { e.printStackTrace(); } finally{ try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } return buffer.toString(); } /** * 根據圖片的URL下載的圖片到本地的filePath * @param filePath 文件夾 * @param imageUrl 圖片的網址 */ public static void downImages(String filePath,String imageUrl){ // 截取圖片的名稱 String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")); //建立文件的目錄結構 File files = new File(filePath); if(!files.exists()){// 判斷文件夾是否存在,若是不存在就建立一個文件夾 files.mkdirs(); } try { URL url = new URL(imageUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); InputStream is = connection.getInputStream(); // 建立文件 File file = new File(filePath+fileName); FileOutputStream out = new FileOutputStream(file); int i = 0; while((i = is.read()) != -1){ out.write(i); } is.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } //執行測試程序代碼 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("請輸入網頁地址:"); String url = input.nextLine(); System.out.print("請輸入編碼方式:"); String encoding = input.nextLine(); System.out.print("請輸入下載到電腦的位置:"); String filePath = input.nextLine(); String htmlResource = getHtmlResourceByUrl(url, encoding); // System.out.println(htmlResource); // 解析網頁源代碼 Document document = Jsoup.parse(htmlResource); // 獲取全部圖片的地址 Elements elements = document.getElementsByTag("img"); for(Element element : elements){ String imgSrc = element.attr("src"); if (!"".equals(imgSrc) && (imgSrc.startsWith("http://") || imgSrc.startsWith("https://"))) { // 判斷imgSrc是否爲空且是否以"http://"開頭 System.out.println("正在下載的圖片的地址:" + imgSrc); downImages(filePath, imgSrc); } } System.out.println("-------------------------下載完畢!----------------------------"); } }