1. 程式人生 > >爬取圖片 jsoup

爬取圖片 jsoup

啥都不說,直接上程式碼,粘上來格式有點亂,你們用的時候,直接複製就行了,但是圖片規則需要自己去搞的

 

package grab;


import java.awt.AWTException;
import java.awt.Robot;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Service {
    
    public static void main(String[] args)  {

            long startTime = System.currentTimeMillis();    //獲取開始時間

            //從第三頁開始抓取 到87 頁
            for (int i = 3; i <= 87; i++) {
                System.out.println("執行第" + (i-2) +"次開始");
                 try {
                    getDoc("http://www.youzi4.cc/mm/meinv/index_"+ i +".html");
                    System.out.println("執行第" + (i-2) +"次結束");
                 } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                /*java中延時去執行,非執行緒 , 如果遇見攔截的可以適當延遲執行檔案
                Robot r;
                try {
                    r = new   Robot();
                     System.out.println( "延時前:"+new Date().toString()  );   
                     r.delay(   5000   ); //延時5秒執行
                    
                     System.out.println(   "執行第"+i+"次" + new Date().toString()   );    
                } catch (AWTException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }      */
            }
            
            
            long endTime = System.currentTimeMillis();
            System.out.println("開始時間為" + startTime + "結束時間為" + endTime + "程式耗時為" + (endTime - startTime)/60000 + "分鐘" );
        
        
    }
    

     public static void getDoc(String urll) throws IOException{

        File f = new File("E://imgs");
             if(!f.exists()){
                 f.mkdirs();
             }
             //以網易為例子
          //Document doc = Jsoup.connect("http://www.163.com/").get();
          Document doc = Jsoup.connect(urll).get();
          //獲取字尾為png和jpg的圖片的元素集合
          Elements pngs = doc.select("img[src~=(?i)\\.(png|jpe?g)]");
          
        for (Element e : pngs) {  
            
            String name = e.attr("alt");
            String src=e.attr("src");//獲取img中的src路徑
            //獲取字尾名
            String imageName = src.substring(name.lastIndexOf("/") + 1,src.length());
           
            // String str = "d62f3df6260c4d3d845b546b6aded87b.png?imageView&thumbnail=453y225&quality=85";
            //String str = "";
             String pattern = "([?][^?]+)$";//擷取?號 後的資料,並將其替換
             String  str1 = imageName.replaceAll(pattern,"");
            
            //連線url
            URL url = new URL(src);
          
            URLConnection uri=url.openConnection();
            //獲取資料流
            InputStream is=uri.getInputStream();
            
            //寫入資料流 如果檔名異常,會丟擲異常的
            OutputStream os = new FileOutputStream(new File("E://imgs", name + ".png")); 
            
            byte[] buf = new byte[5*1024*1024]; 
            int l=0;
            while ((l=is.read(buf)) != -1) {
                os.write(buf, 0, l);
            }
            
        }
    
   }
}