準備工作 工具:Python3.6、pycharm 庫:requests、re、time、random、os 目標網站:妹子圖(具體url大家自己去代碼里看。。。) 在寫代碼之前 在我們開始寫代碼之前,要先對網站進行分析,重點有這個幾個地方: 1、先判斷網頁是否靜態網頁,這個關係我們採用的爬蟲手段! ...
準備工作
工具:Python3.6、pycharm
庫:requests、re、time、random、os
目標網站:妹子圖(具體url大家自己去代碼里看。。。)
在寫代碼之前
在我們開始寫代碼之前,要先對網站進行分析,重點有這個幾個地方:
1、先判斷網頁是否靜態網頁,這個關係我們採用的爬蟲手段!
簡單的說,網頁中的內容,在網頁源代碼中都可以找到,那麼就可以斷定,這個網站是靜態的了;如果沒有找到,就需要去開發者工具中查找,看看是抓包呢還是分析js結構或者其他的方式。
2、看看網頁的結構,大致清楚抓取目標數據,需要幾層迴圈,每次迴圈的方式,以及是否保證沒有遺漏!
開始寫代碼
首先是導入上述的各種庫,沒有的需要安裝一下!然後寫入以下幾行代碼獲取網頁源代碼看看是否有反爬:
全部在a標簽的屬性中,那麼我們可以用一行代碼獲取了
infos = re.findall(r'a href="(http://www.meizitu.com/.*?html)" target="_blank" title="(.*?)" ',html.text)
這裡用正則匹配,2個括弧中的內容就是我們需要的url和名字了,然後開始構建迴圈遍歷所有的分類
上一步取出的infos是列表,而且每一個元素都是一個元組,格式為(url,名字),所有我們用2個元素去遍歷infos,來獲取我們需要的內容,先列印下看看結果是否正確!
這裡先不創建文件夾,先進行下一步,訪問分類的url,然後開始構建分類中的頁碼吧!分析網頁發現,所有的頁碼都在下方,但是還是稍有不同:沒有當前頁、多了下一頁和末頁
由於存在圖集不足一頁的情況(上述源代碼就不會出現),所以我們這麼處理迴圈
迴圈所有的url,獲取所有圖集的url列表,27行沒有用encoding指定編碼是因為這裡我不需要取到中文的內容,所以簡寫了一下!終於該取圖片了!
圖集的title和圖集內所有圖片的url都取到了!其實到這裡就已經完成了爬蟲的80%了!剩下的20%就是保存圖片到本地,這裡就不多說了,給大家提供2個代碼片段,一個是新建文件夾並判斷是否存在,一個是剔除字元串內不符合命名要求的字元
最終完整代碼和運行效果
在請求中加入了時間模塊的暫停功能,不加入的話可能會被網頁拒絕訪問!
在最後請求圖片地址的時候,需要加入UA來告訴伺服器你是瀏覽器而不是腳本,這個是最常用的反爬手段了
下載一段時間後的效果
相信大家應該也做出你自己的腳本了吧!有什麼問題也可以在評論區或者私信發消息哦!
進群:125240963 即可獲取數十套PDF哦!