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
謝謝支援!!
相關文章
- go實現抓妹子圖片Go
- Scrapy框架爬取海量妹子圖框架
- 爬蟲福利----妹子圖網MM批量下載爬蟲
- 教你用Python爬取妹子圖APPPythonAPP
- 爬蟲福利二 之 妹子圖網MM批量下載爬蟲
- Python Selenium+PhantomJs 爬煎蛋妹子圖PythonJS
- 老司機帶你用python來爬取妹子圖Python
- Node.js爬取妹子圖-crawler爬蟲的使用Node.js爬蟲
- RocketMQ實戰系列從理論到實戰MQ
- Maven實戰與原理分析(二):maven實戰Maven
- 實戰篇——CSRF漏洞pikachu靶場實戰
- Activiti實戰
- Git實戰Git
- flex實戰Flex
- MQTT 實戰MQQT
- CoreOS實戰
- Shell——實戰
- es 實戰
- AutoGPT實戰GPT
- LangChain實戰LangChain
- SEO 實戰
- ClickHouse實戰
- Sentinel實戰
- Docker實戰Docker
- 實戰NginxNginx
- SaltStack實戰
- php實戰PHP
- Puppet實戰
- RMAN實戰
- WebService實戰Web
- Jedis實戰
- OSGi實戰
- Cassandra實戰
- REM實戰REM
- Redis實戰Redis
- DDD實戰課(實戰篇)--學習筆記筆記
- 01-kNN演算法實戰-(機器學習實戰)KNN演算法機器學習
- javaNIO實戰4----> java NIO的通道Channel實戰Java