使用JAVA爬取網頁圖片


經過之前的HttpURLConnection還有各種流的結束,已經可以開始理解怎么下載網頁上的一張圖片了。

對各種流不理解的話,可以翻翻前面的隨筆,講得都比較詳細。在此就不細講了。

主要流程:

1、HttpURLConnection連接上圖片的網址,打開一個InputStream。

2、把InputStream的內容讀取到ByteArrayOutputStream中,此時ByteArrayOutputStream存儲了圖片數據的byte數組。

3、通過文件流,把byte數據填充到一個jpg文件中。

 

代碼非常簡單:

String strUrl = "http://ww4.sinaimg.cn/mw1024/005vbOHfgw1eylg2gnnrlj30ia0s87ac.jpg";

 


//構造URL
URL url = new URL(strUrl);

//構造連接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();

//這個網站要模擬瀏覽器才行
conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");

//打開連接
conn.connect();

//打開這個網站的輸入流
InputStream inStream = conn.getInputStream();

//用這個做中轉站 ,把圖片數據都放在了這里,再調用toByteArray()即可獲得數據的byte數組
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//用這個是很好的,不用一次就把圖片讀到了文件中
//要是需要把圖片用作其他用途呢?所以直接把圖片的數據弄成一個變量,十分有用
//相當於操作這個變量就能操作圖片了

byte [] buf = new byte[1024];
//為什么是1024?
//1024Byte=1KB,分配1KB的緩存
//這個就是循環讀取,是一個臨時空間,多大都沒關系
//這沒有什么大的關系,你就是用999這樣的數字也沒有問題,就是每次讀取的最大字節數。
//byte[]的大小,說明你一次操作最大字節是多少
//雖然讀的是9M的文件,其實你的內存只用1M來處理,節省了很多空間.
//當然,設得小,說明I/O操作會比較頻繁,I/O操作耗時比較長,
//這多少會有點性能上的影響.這看你是想用空間換時間,還是想用時間換空間了.
//時間慢總比內存溢出程序崩潰強.如果內存足夠的話,我會考慮設大點.
int len = 0;

//讀取圖片數據
while((len=inStream.read(buf))!=-1){
System.out.println(len);
outStream.write(buf,0,len);
}
inStream.close();
outStream.close();

//把圖片數據填入文件中
File file = new File("t.jpg");

FileOutputStream op = new FileOutputStream(file);

op.write(outStream.toByteArray());

op.close();



}

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM