【圖文詳解】python基礎(chǔ)爬蟲實(shí)戰(zhàn)——5分鐘做個(gè)圖片自動(dòng)下載器

我想要(下)的,我現(xiàn)在就要
Python爬蟲實(shí)戰(zhàn)——圖片自動(dòng)下載器
之前介紹了那么多基本知識(shí)【Python爬蟲】入門知識(shí)(沒看的趕緊去看)大家也估計(jì)手癢了。想要實(shí)際做個(gè)小東西來看看,畢竟:
talk is cheap show me the code!
這個(gè)小工程的代碼都在github上,感興趣的自己去下載:
https://github.com/hk029/Pickup
制作爬蟲的基本步驟
順便通過這個(gè)小例子,可以掌握一些有關(guān)制作爬蟲的基本的步驟。
一般來說,制作一個(gè)爬蟲需要分以下幾個(gè)步驟:
-
分析需求(對(duì),需求分析非常重要,不要告訴我你老師沒教你)
-
分析網(wǎng)頁源代碼,配合F12(沒有F12那么亂的網(wǎng)頁源代碼,你想看死我?)
-
編寫正則表達(dá)式或者XPath表達(dá)式(就是前面說的那個(gè)神器)
-
正式編寫Python爬蟲代碼
效果
運(yùn)行:

恩,讓我輸入關(guān)鍵詞,讓我想想,輸入什么好呢?好像有點(diǎn)暴露愛好了。

回車

好像開始下載了!好贊!,我看看下載的圖片,哇瞬間我感覺我又補(bǔ)充了好多表情包....

好了,差不多就是這么個(gè)東西。
需求分析
"我想要圖片,我又不想上網(wǎng)搜“
"最好還能自動(dòng)下載"
……
這就是需求,好了,我們開始分析需求,至少要實(shí)現(xiàn)兩個(gè)功能,一是搜索圖片,二是自動(dòng)下載。
首先,搜索圖片,最容易想到的就是爬百度圖片的結(jié)果,好,那我們就上百度圖片看看

基本就是這樣,還挺漂亮的。
我們?cè)囍岩粋€(gè)東西,我打一個(gè)暴字,出來一系列搜索結(jié)果,這說明什么....

隨便找一個(gè)回車

好了,我們已經(jīng)看到了很多圖片了,如果我們能把這里面的圖片都爬下來就好了。我們看見網(wǎng)址里有關(guān)鍵詞信息

我們?cè)囍诰W(wǎng)址直接換下關(guān)鍵詞,跳轉(zhuǎn)了有沒有!

這樣,可以通過這個(gè)網(wǎng)址查找特定的關(guān)鍵詞的圖片,所以理論上,我們可以不用打開網(wǎng)頁就能搜索特定的圖片了。下個(gè)問題就是如何實(shí)現(xiàn)自動(dòng)下載,其實(shí)利用之前的知識(shí),我們知道可以用request,獲取圖片的網(wǎng)址,然后把它爬下來,保存成.jpg就行了。
所以這個(gè)項(xiàng)目就應(yīng)該可以完成了。
分析網(wǎng)頁
好了,我們開始做下一步,分析網(wǎng)頁源代碼。這里 我先切換回傳統(tǒng)頁面,為什么這樣做,因?yàn)槟壳鞍俣葓D片采用的是瀑布流模式,動(dòng)態(tài)加載圖片,處理起來很麻煩,傳統(tǒng)的翻頁界面就好很多了。

這里還一個(gè)技巧,就是:能爬手機(jī)版就不要爬電腦版,因?yàn)槭謾C(jī)版的代碼很清晰,很容易獲取需要的內(nèi)容。
好了,切換回傳統(tǒng)版本了,還是有頁碼的看的舒服。

我們點(diǎn)擊右鍵,查看源代碼

這都是什么鬼,怎么可能看清??!

這個(gè)時(shí)候,就要用F12了,開發(fā)者工具!我們回到上一頁面,按F12,出來下面這個(gè)工具欄,我們需要用的就是左上角那個(gè)東西,一個(gè)是鼠標(biāo)跟隨,一個(gè)是切換手機(jī)版本,都對(duì)我們很有用。我們這里用第一個(gè)

然后選擇你想看源代碼的地方,就可以發(fā)現(xiàn),下面的代碼區(qū)自動(dòng)定位到了這個(gè)位置,是不是很NB!

我們復(fù)制這個(gè)地址

然后到剛才的亂七八糟的源代碼里搜索一下,發(fā)現(xiàn)它的位置了?。ㄐ?!我還找不到你!)但是這里我們又疑惑了,這個(gè)圖片怎么有這么多地址,到底用哪個(gè)呢?我們可以看到有thumbURL,middleURL,hoverURL,objURL

通過分析可以知道,前面兩個(gè)是縮小的版本,hover是鼠標(biāo)移動(dòng)過后顯示的版本,objURL應(yīng)該是我們需要的,不信可以打開這幾個(gè)網(wǎng)址看看,發(fā)現(xiàn)obj那個(gè)最大最清晰。


好了,找到了圖片位置,我們就開始分析它的代碼。我看看是不是所有的objURL全是圖片

貌似都是以.jpg格式結(jié)尾的,那應(yīng)該跑不了了,我們可以看到搜索出61條,說明應(yīng)該有61個(gè)圖片
編寫正則表達(dá)式
通過前面的學(xué)習(xí),寫出如下的一條正則表達(dá)式不難把?

編寫爬蟲代碼
好了,正式開始編寫爬蟲代碼了。這里我們就用了2個(gè)包,一個(gè)是正則,一個(gè)是requests包,之前也介紹過了,沒看的回去看!

然后我們把剛才的網(wǎng)址粘過來,傳入requests,然后把正則表達(dá)式寫好

理論有很多圖片,所以要循環(huán),我們打印出結(jié)果來看看,然后用request獲取網(wǎng)址,這里由于有些圖片可能存在網(wǎng)址打不開的情況,加個(gè)5秒超時(shí)控制。

好了,再就是把網(wǎng)址保存下來,我們?cè)谑孪仍诋?dāng)前目錄建立一個(gè)picture目錄,把圖片都放進(jìn)去,命名的時(shí)候,用數(shù)字命名把

整個(gè)代碼就是這樣:

我們運(yùn)行一下,看效果

好了我們下載了58個(gè)圖片,咦剛才不是應(yīng)該是61個(gè)嗎?

我們看,運(yùn)行中出現(xiàn)了有一些圖片下載不了

我們還看到有圖片沒顯示出來,打開網(wǎng)址看,發(fā)現(xiàn)確實(shí)沒了。

所以,百度有些圖片它緩存到了自己的機(jī)器上,所以你還能看見,但是實(shí)際連接已經(jīng)失效
好了,現(xiàn)在自動(dòng)下載問題解決了,那根據(jù)關(guān)鍵詞搜索圖片呢?只要改url就行了,我這里把代碼寫下來了

好了,享受你第一個(gè)圖片下載爬蟲吧??!當(dāng)然不只能下載百度的圖片拉,依葫蘆畫瓢,你現(xiàn)在應(yīng)該做很多事情了,比如爬取頭像,爬淘寶展示圖,或是...美女圖片,捂臉。一切都憑客官你的想象了,當(dāng)然,作為爬蟲的第一個(gè)實(shí)例,雖然純用request已經(jīng)能解決很多問題了,但是效率還是不夠高,如果想要高效爬取大量數(shù)據(jù),還是用scrapy吧。
這個(gè)小工程的代碼都在github上,感興趣的自己去下載:
https://github.com/hk029/Pickup
作者:voidsky_很有趣兒
來源:http://www.jianshu.com/p/19c846daccb3
————廣告時(shí)間————
馬哥教育2017年P(guān)ython自動(dòng)化運(yùn)維開發(fā)實(shí)戰(zhàn)班,馬哥聯(lián)合BAT、豆瓣等一線互聯(lián)網(wǎng)Python開發(fā)達(dá)人,根據(jù)目前企業(yè)需求的Python開發(fā)人才進(jìn)行了深度定制,加入了大量一線互聯(lián)網(wǎng)公司:大眾點(diǎn)評(píng)、餓了么、騰訊等生產(chǎn)環(huán)境真是項(xiàng)目,課程由淺入深,從Python基礎(chǔ)到Python高級(jí),讓你融匯貫通Python基礎(chǔ)理論,手把手教學(xué)讓你具備Python自動(dòng)化開發(fā)需要的前端界面開發(fā)、Web框架、大監(jiān)控系統(tǒng)、CMDB系統(tǒng)、認(rèn)證堡壘機(jī)、自動(dòng)化流程平臺(tái)六大實(shí)戰(zhàn)能力,讓你從0開始蛻變成Hold住年薪20萬的Python自動(dòng)化開發(fā)人才。
掃描二維碼和更多小伙伴組團(tuán)學(xué)習(xí)

