java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地
上一講我們說了如何把網(wǎng)頁的數(shù)據(jù)通過分析后存儲到數(shù)據(jù)庫,我們這次講如何將網(wǎng)頁上的圖片提取并下載到本地。
思路如下:
我們本次要爬取的是昵圖網(wǎng)首頁的圖片。
1、首先分析我們要爬取的網(wǎng)頁的代碼結(jié)構(gòu),每個網(wǎng)頁的代碼結(jié)構(gòu)都不大一樣,所以要做好分析。
我們進(jìn)入昵圖網(wǎng)的首頁,http://www.nipic.com/index.html
按F12開啟瀏覽器的調(diào)試模式,可以通過鼠標(biāo)看到圖片的后臺代碼:點(diǎn)擊調(diào)試的小箭頭,然后點(diǎn)擊對應(yīng)的圖片,既可以看到圖片在頁面上對應(yīng)的編碼。
或者,直接“查看源代碼”就可以看到整個網(wǎng)頁的源碼
我們可以在源代碼界面看到很多.jpg結(jié)尾的圖片
我們可以直接通過查找來查看到底有多少張圖片在頁面上,我本次用的是360瀏覽器,每個瀏覽器的使用方法大同小異。
查找的快捷方式是Ctrl+F ?同時(shí)按住兩個按鍵就可以在提示框中輸入查找的信息。
或者右擊菜單“查找”
在關(guān)鍵詞框中輸入".jpg"
我們可以看到,系統(tǒng)提示是14張圖片的鏈接。
2、編寫代碼,獲取網(wǎng)頁的圖片,首先我們要這個頁面的圖片的大體格式是怎樣的。
我們看下幾個圖片鏈接的代碼格式:
上面三張圖片的格式都是常見的:http://.......jpg,則我們可以把這個做成正則表達(dá)式的形式如:http:\S{1,}.jpg
則,我們利用前面兩講的代碼,編寫如下:
3、效果如下:
點(diǎn)擊運(yùn)行后,系統(tǒng)自動在D盤的image文件夾下載對應(yīng)的圖片
最終下載完后:
最后,其實(shí)你網(wǎng)速快的話,程序不設(shè)置休眠也可以。
最后,總結(jié)下我們本次用到的新知識:
1、函數(shù):urllib.urlretrieve(url[, filename[, reporthook[, data]]])
函數(shù)說明
將URL表示的網(wǎng)絡(luò)對象復(fù)制到本地文件。如果URL指向本地文件,則對象將不會被復(fù)制,除非提供文件名。返回一個元組()(filename,header),其中filename是可以找到對象的本地文件名,header是urlopen()返回的對象的info()方法(用于遠(yuǎn)程對象)。
第二個參數(shù)(如果存在)指定要復(fù)制到的文件位置(如果沒有,該位置將是一個生成名稱的tempfile)。第三個參數(shù),如果存在,則是一個回調(diào)函數(shù),它將在建立網(wǎng)絡(luò)連接時(shí)調(diào)用一次,并且在此后每個塊讀取后調(diào)用一次。這個回調(diào)函數(shù)將傳遞三個參數(shù);到目前為止傳輸?shù)膲K計(jì)數(shù),以字節(jié)為單位的塊大小,以及文件的總大小。第三個參數(shù)可能是-1,在舊的FTP服務(wù)器上,它不返回文件大小以響應(yīng)檢索請求。
參數(shù)說明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數(shù),urllib會生成一個臨時(shí)文件來保存數(shù)據(jù));
reporthook:是一個回調(diào)函數(shù),當(dāng)連接上服務(wù)器、以及相應(yīng)的數(shù)據(jù)塊傳輸完畢的時(shí)候會觸發(fā)該回調(diào)。我們可以利用這個回調(diào)函數(shù)來顯示當(dāng)前的下載進(jìn)度。
data:指post到服務(wù)器的數(shù)據(jù)。該方法返回一個包含兩個元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應(yīng)頭。
2、time.sleep(secs)
Python time sleep() 函數(shù)推遲調(diào)用線程的運(yùn)行,可通過參數(shù)secs指秒數(shù),表示進(jìn)程掛起的時(shí)間。
3、os.makedirs()函數(shù)
語法格式:
os.makedirs(name[, mode=0o777][, exist_ok=False])
遞歸目錄創(chuàng)建函數(shù),和mkdir()很像,但是所有中間級目錄都要包含葉目錄。
遞歸創(chuàng)建目錄,題中應(yīng)有之意即路徑中哪一層不存在,則自動創(chuàng)建。
區(qū)別于os.mkdir(path, mode=0o777, *, dir_fd=None),只創(chuàng)建最后一層的目錄。
name:所要創(chuàng)建的目錄
參數(shù)mode表示權(quán)限;
如果exist_ok是False(默認(rèn)),當(dāng)目標(biāo)目錄(即要創(chuàng)建的目錄)已經(jīng)存在,會拋出一個OSError。
4、b=a.split('/')[-1]
我們不確定圖片鏈接的長度,所以如果從左邊開始取下標(biāo),則最后一個文件名的下標(biāo)值是不一樣的,不好操作,但是如果寫的是-1,則說明要取得是右邊第一個。
本節(jié)課沒有課堂視頻,因?yàn)樾碌慕淌覜]有帶多余的麥克風(fēng)。
總結(jié)
以上是生活随笔為你收集整理的java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6.6.1最优二叉树(赫夫曼树)
- 下一篇: websocket python爬虫_p