爬蟲高級篇,教你如何抓取接口

爬蟲高級篇,教你如何抓取接口

今天要爬取目標網站是極簡壁紙,先放張圖,這就是咱們要爬取的首頁,html

在這裏插入圖片描述

因爲網站禁止了右擊—>檢查,F12,前端

在這裏插入圖片描述

選擇Elemets,隨便定位一張圖片試試,python

在這裏插入圖片描述

能夠看到,這是縮略圖,而咱們要爬取的是高清原圖,ajax

在這裏插入圖片描述

去Network查看,發現返回的html並無咱們想要圖片數據json

<div class="view-body" :class="{ 'view-body-classify':config.page.active == 'classify'}">
                <div :id="'box_'+j.i" v-for="(j,index) in json.view" class="img-box">
                    <img :id="j.i" v-lazy="getUrl(j.i,j.t)" data-type="img-box" :data-index="index" v-if="j.t != 'ad'" :key="getUrl(j.i,j.t)" width="100%" alt="" @click="showFull(index)">
                    <img :id="j.i" src="img/ad.png" v-if="j.t == 'ad'" style="width:100%;z-index:-1000" alt="" transform="translate(-50%, -50%)" onload='loadAdsense("box",this)'>
                </div>
                <div v-if="config.page.active == 'like' && json.likes.length == 0" class="nolikemsg center">
                    <span>
                        您尚未收藏喜歡的圖片<br>
                        點擊圖片上的小紅心試試&nbsp;<span class="heart iconfont iconheart"></span>
                    </span>
                </div>
            </div>

顯然數據是經過js先成上去的,所以,接下來就是抓接口了,怎麼抓?後端

打開Network,刷新頁面,選擇XHR(過濾ajax請求),會發現有個getJson請求,點進去看看,這不就是咱們要的數據嗎?瀏覽器

在這裏插入圖片描述

有了數據,那就簡單了,只要朝getJson這個接口發送請求那不就能夠獲取數據了嗎,關鍵是如何發送請求,模擬請求的關鍵的參數,因此第一步,咱們應該看看請求有哪些參數,app

accept: */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8
access: e7809d01583f1f91da7ad087fd736c97e5df2780557bc50f54a4e80ba438cf9c
cache-control: no-cache
content-length: 30
content-type: application/json
location: bz.zzzmh.cn
origin: https://bz.zzzmh.cn
pragma: no-cache
referer: https://bz.zzzmh.cn/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
sign: ea04368c4c168320af527f08a6501345
timestamp: 1603903026787
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36

已過一步步測試發現sign參數只有在更換瀏覽器時改變,而access和timestamp每次都在變化,顯然timestamp表明時間戳,因此關鍵參數在與access,能夠猜測一下access應該是通過某種加密加密過的字符串,感受像是md5,那麼這該如何解決呢?cors

無論怎樣,先把access參數複製一下去全局搜索一下,發現沒有,那怎們辦啊?函數

在這裏插入圖片描述

既然前端沒有,那確定是js生成的,那麼接下來的思路就是尋找js代碼,該如何下手了?

觀察返回前端代碼,發現引用的js大都是cdn,顯然不會有核心邏輯。

在這裏插入圖片描述

進去看看

在這裏插入圖片描述

這即是js代碼,26行那一堆代碼是什麼,顯然不符合js語法,猜測應該是混淆了,爲何要混淆?答案很明顯(心中竊喜),看來方向找對了。

既然混淆了,那就應該解混淆,網上js在線解混淆的網站一堆,我就不示範了,不會就去百度。

獲得解混淆後的js代碼,搜索關鍵參數access,恍然大悟。

在這裏插入圖片描述

果真是md5加密沒錯,只要咱們模仿該加密方式,生成參數access,不就能夠向後端請求數據了嗎?

在這裏插入圖片描述

通過一番折騰,確實拿到數據,可這數據該怎麼用?

在這裏插入圖片描述

能夠發現前端圖片連接都是經過getUrl這個函數生成的,那麼咱們能夠去js中搜索看看,

在這裏插入圖片描述

果真在這了,if判斷猜測一下,應該一個是原圖一個是縮略圖的連接,按照該方法生成連接便可,大體思路就這了,博主已經碼不動了,若是以爲有用,點贊支持是我最大的動力!

相關文章
相關標籤/搜索