寫在前面
前幾天玩遊戲時,lol盒子右下角有條廣告,
廣告大概這個樣子
伸手黨請戳文章尾部
咦,小姐姐,還有cosplay,點進去看看。
哇,發現一個好玩的網站,好多漂亮的妹子,頁面打開很流暢,點開後有的瀏覽頁面還有好聽的音樂,產品體驗極佳。
不過每組圖片只能看前幾張圖,後面的圖只能看到縮略圖,如果想繼續看或者打包下載得花銀子,通常要1-5rmb。
ctrlC+ctrlV幾張後不樂意了,這麼保存一來看不到全部圖片,二來,麻煩,太麻煩了。
俗話說,妹子是第一生產力,魯迅有云,懶人創造美好世界。
項目編寫
試試吧,看能不能發現點有趣的東東。首先習慣性的看看html源碼,blabla一堆,頭大,pass。
從頁面源碼來看,頁面應該是前端渲染出來的,直接解析爬蟲爬的話會比較麻煩。既然是前端渲染,那再看看請求吧,首頁肯定是加載相冊列表,沒啥大用處,直接看加載具體某一相冊的請求結果,點開某一相冊,跳過圖片,看看有沒有什麼可用的接口,果然有。
複製出來,瀏覽器走起,請求後返回如下信息
很明顯是該相冊的詳細信息獲取接口,可是怎麼有些像是被編碼過的東西。既然被編碼了,解碼出來瞧瞧,postman走起。postman順利解析出結果
上下翻翻看,發現了一個神奇的鏈接,是個zip壓縮包,嗯,有點意思。
下載回來解壓,哈哈,居然是該相冊的所有照片。
看返回的結果,很明顯使用了jsonp,於是接著試著減少參數,去除了返回結果中惱人的無用回掉前綴,最後簡化到僅剩一個參數,id,這接口太呆萌了。
此外還發現了網頁上音樂的地址。
至此該網站的“核心資產”已經被扒的底褲都沒了,下面開始批量爬吧。
爬蟲思路
有兩種思路,一種是利用主頁調用的獲取相冊列表參數接口來獲得相冊列表再通過列表爬壓縮包地址,另外一種是直接從1開始依次嘗試到首頁最新的一個相冊對應的id。最終決定採用第二種思路,因為這樣即使首頁隱藏的相冊通過這種方式也能被發現。
開搞,建數據庫,數據表,為方便後續追加執行,以及放在服務器上爬,所以採用springboot配合異步調用來實現。一開始使用post方式進行調用,結果嘗試抓取了一兩百條後到數據庫一看,怎麼這麼多重複的啊,而且怎麼同一個id和我用postman直接調得到的結果不一致?很可能開反爬了。
轉變思路,postman採用的是get方式,所以程序試試也使用get方式進行調用,同時加入線程隨機睡眠時間和User-Agent請求頭,以此模擬普通用戶的瀏覽器訪問行為。bingo,順利的抓取到了正確的圖包名稱、下載地址地址、音樂名稱、音樂下載地址等信息。
扔服務器上爬吧。等了大概十幾分鍾,爬完後總共獲取到892條有效的圖包記錄,202條有效的音樂記錄。
爬到地址後可不能算結束,還得把真正的壓縮包都下載回來,寫個批量下載的方法,服務器走起,然後便開始吭哧吭哧的下載,速度還行,能接近7MB/S。
從上午11點開始到晚上9點下載完成,總共耗時10個小時,從服務器上全部下載回來吧。
經過漫長的等待後,終於下載完,寫了個腳本統計結果,最終:總共獲取到了46187張圖片,大小36.5GB。
項目效果圖:
寫在最後
看完文章心動的小夥伴關注、轉發,私信“資料”即可免費獲取全套的python自學視頻課程哦,學完以後萬物皆可爬~
加油!!!!
30天Python 學習計劃,供大家參考。
第1天
Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
Python環境搭建
第2天
使用python解釋器
關於python語法的簡單介紹
第3天
詞法結構
運算符和表達式
第4天
python數據結構 列表/字符串/元組
第5天
python數據結構 字典/集合
第6天
python流程控制1
if語句
for循環
while循環
第7天
python流程控制2
continue語句
break語句
pass語句
第8~9天
格式化字符串
讀寫文件
第10~12天
python函數
Lambda 表達式
編碼風格
第13天
python模塊
第14天
迭代器
生成器
生成器表達式
第15~16天
錯誤和異常
第17~19天
面向對象編程
第19~20天
標準庫使用
日期和時間
數學
操作系統接口
第21天
安裝 Python 模塊
第22~23天
虛擬環境和包
第24天
多線程
第25~30天
訓練題
與之配套的清華畢業生415集Python視頻教程:
由北京尚學堂高淇老師親自錄製,415集Python全棧入門到精通的Python全套+前端+4個實戰項目,第2季已經新鮮出爐了!小夥伴們快快領取學習吧!
獲取方式:轉發此文+關注 並 私信小編 “ 資料 ”,即可免費獲取!
獲取方式:轉發此文+關注 並 私信小編 “ 資料 ”,即可免費獲取!
閱讀更多 北京尚學堂 的文章