Python3--妹子圖實戰

這個項目是我自己想做的,我並沒有自行去看其他人的博客,只是單純有這個想法.

注:本文使用的模塊不多,思路也很簡單.幾乎都是鏈式爬取的,也可以叫做是深度爬取,即是一個鏈接接着下一個鏈接!

等你們看完代碼,你們都會驚訝,這麼簡單!!!!

哈哈,是的!!


廢話不多說,直接上步驟!

1.毫不遲疑就是分析網站的結構啦:


首先點進去打開首頁,點進去第一個套圖的網址,

發現,第一張圖片的鏈接是:http://www.mzitu.com/130071,而最後一張是http://www.mzitu.com/130071/49

顯然是以http://www.mzitu.com/130071就是圖片合集的下標0了!找到這個就好辦了,我們再次分析圖片的結尾下標!結尾下標是:http://www.mzitu.com/130071/49,一共50張!

然後在去分析下一組這個url,發現一個更大的驚喜.

的鏈接是:http://www.mzitu.com/130023,而對應首頁上的第二個套圖鏈接!


分析完這個就好辦了,那麼我現在有思路了

說下,首先,這個網站的鏈接分佈類似於火車節的那種,只要你找到頭,就能通過頭一直查找下去,直到網站的底部.

思路:

    1.打開一個套圖的URL(頭),解析出這個網頁內部的img圖片地址,下載這個img圖片.

    2.讓其尋找下一頁的url!再次打開,下載,再次尋找下一頁的url....以此類推!直到找到網站的底部位置!

    但是問題來了,該怎麼去實現呢?

來一串僞代碼:

def Get_thelink_and_next_link(url):

    打開url,獲取網頁呈現後的結果.

    解析出三個重要信息:

        1.這個頁面的妹子圖鏈接.

        2.下一頁的妹子圖鏈接.

        3.解析出妹子圖的名稱(這個在存儲有用.)

    下載 妹子圖片鏈接

    存儲到本地 記得把妹子圖的名稱加上.

    一直重複

那麼開始!!!


首先導入我們所需要的庫文件.

我這裏是通過requests這個第三方庫來實現這個代碼.

import requests#打開網頁,進行下載時所用

import re#解析時用

from requests.exceptions import ConnectionError,HTTPError#捕捉錯誤


我們定義了函數,get_links_img()

裏面的功能包括,打開網頁並且解析出剛纔說的三個重要的信息.

    圖片的鏈接

    該頁面的下一頁

    妹子圖的名稱

我這裏是完全通過re模塊來去解析的.然後注意下那個Splite(),這個函數就是解析下一頁的url裏面帶上的雙引號""!


解析過後便是提示和下載圖片

我們在這用requests.get()打開剛剛解析出的圖片鏈接,然後獲取這個圖片鏈接的二進制.

通過文件讀寫的方式寫入到本地.

自此,整個函數的功能執行差不多執行完畢.

還差最最關鍵的一步,就是返回已經解析好的下一頁的鏈接.

爲什麼要返回?

因爲返回才能執行爬取下一頁的功能!


有很多人可能想到我這樣的代碼結構,會用遞歸函數去實現爬取.

這裏我得誇你,真的,你能想到遞歸,就意味着你能想到比遞歸更好的解決這個函數運行的方法.

    我一開始就是使用遞歸,然後程序越跑越慢,執行效率極其低下.

    然而,互聯網是多麼得偉大,我嘗試去查找解決方案.終於讓我找到了.

    看圖!


現在知道爲什麼要返回下一頁的鏈接了吧.

    簡單解析下:

    url = 鏈接

    while url:#如果url能用,那麼我就傳入到下面那個函數

        url = get_links_and_img(url)

    get_links_and_img()返回的這個url是能用的,我就在再次傳入到get_links_and_img(),如果不能用就直接停止.

然後運行結果...



怎麼樣?是不是很簡單?

了了70行代碼,一個非常簡單的爬蟲就完成了..

其實爬蟲學的不是方法,而是思路.我個人認爲,一個網站怎樣爬取,不是看你怎麼爬,而是看這個網站的佈局.根據網站的佈局來進行代碼編輯.

爬蟲怎麼去學才能學好?

    我個人給出的觀點是:與其在那看視頻學習,不如自己去實踐一番.動手纔是王道.

如果你也喜歡爬蟲,如果你也喜歡技術,那麼歡迎你加入我們的羣,我們歡迎熱愛技術的你

                                                    


羣號碼:749511386

謝謝支持!!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章