前提

最近我的的朋友瀏覽一些網(wǎng)站,看到好看的圖片,問我有沒有辦法不用手動(dòng)一張一張保存圖片!

我說用Jsoup丫!

保存壁紙?zhí)闊??教你如何用Java快速獲取網(wǎng)站圖片_maven項(xiàng)目

打開開發(fā)者模式(F12),找到對(duì)應(yīng)圖片的鏈接,在互聯(lián)網(wǎng)中,每一張圖片就是一個(gè)鏈接!

保存壁紙?zhí)闊拷棠闳绾斡肑ava快速獲取網(wǎng)站圖片_maven項(xiàng)目_02

一、新建Maven項(xiàng)目,導(dǎo)入Jsoup環(huán)境依賴

org.jsoup
jsoup
1.11.2

二、代碼編寫

public class JsoupTest {
public static void main(String[] args) throws IOException {
// 爬蟲的網(wǎng)站
String url="https://mp.weixin.qq.com/s/caU6d6ebpsLVJaf-7gMjtg";
// 獲得網(wǎng)頁(yè)的document對(duì)象
Document document = Jsoup.parse(new URL(url), 10000);
// 爬取含圖片的代碼部分
Element content = document.getElementById("js_content");
// 獲取img標(biāo)簽代碼  這是個(gè)集合
Elements imgs = content.getElementsByTag("img");
// 命名圖片的id
int id=0;
for (Element img : imgs) {
// 獲取具體的圖片
String pic = img.attr("data-src");
URL target = new URL(pic);
// 獲取連接對(duì)象
URLConnection urlConnection = target.openConnection();
// 獲取輸入流,用來讀取圖片信息
InputStream inputStream = urlConnection.getInputStream();
// 獲取輸出流  輸出地址+文件名
id++;
FileOutputStream fileOutputStream = new FileOutputStream("E://JsoupPic//" + id + ".png");
int len=0;
// 設(shè)置一個(gè)緩存區(qū)
byte[] buffer = new byte[1024 * 1024];
// 寫出圖片到E:/JsoupPic中,  輸入流讀數(shù)據(jù)到緩沖區(qū)中,并賦給len
while ((len=inputStream.read(buffer))>0){
// 參數(shù)一:圖片數(shù)據(jù)  參數(shù)二:起始長(zhǎng)度  參數(shù)三:終止長(zhǎng)度
fileOutputStream.write(buffer, 0, len);
}
System.out.println(id+".png下載完畢");
// 關(guān)閉輸入輸出流 最后創(chuàng)建先關(guān)閉
fileOutputStream.close();
inputStream.close();
}
}
}

成果:

保存壁紙?zhí)闊??教你如何用Java快速獲取網(wǎng)站圖片_輸入流_03

心得:

1、網(wǎng)絡(luò)上的每一張圖片都是一個(gè)鏈接

2、我們知道整個(gè)網(wǎng)頁(yè)就是一個(gè)文檔樹,先找到包含圖片的父id,再通過getElementsByTag()獲取到圖片的標(biāo)簽,通過F12,我們知道圖片的鏈接是存在img標(biāo)簽里面的 data-src屬性中

3、通過標(biāo)簽的data-src屬性,就獲取到具體圖片的鏈接

4、通過輸入輸出流,把圖片保存在本地中!