爬蟲高級篇,教你如何抓取介面
今天要爬取目標網站是極簡壁紙,先放張圖,這就是我們要爬取的首頁,

由于網站禁止了右擊—>檢查,F12,

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

可以看到,這是縮略圖,而我們要爬取的是高清原圖,

去Network查看,發現回傳的html并沒有我們想要圖片資料
<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>
點擊圖片上的小紅心試試 <span class="heart iconfont iconheart"></span>
</span>
</div>
</div>
顯然資料是通過js先成上去的,因此,接下來就是抓介面了,怎么抓?
打開Network,重繪頁面,選擇XHR(過濾ajax請求),會發現有個getJson請求,點進去看看,這不就是我們要的資料嗎?

有了資料,那就簡單了,只要朝getJson這個介面發送請求那不就可以獲取資料了嗎,關鍵是如何發送請求,模擬請求的關鍵的引數,所以第一步,我們應該看看請求有哪些引數,
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,那么這該如何解決呢?
不管怎樣,先把access引數復制一下去全域搜索一下,發現沒有,那怎們辦啊?

既然前端沒有,那肯定是js生成的,那么接下來的思路就是尋找js代碼,該如何下手了?
觀察回傳前端代碼,發現參考的js大都是cdn,顯然不會有核心邏輯,

進去看看

這便是js代碼,26行那一堆代碼是什么,顯然不符合js語法,猜想應該是混淆了,為什么要混淆?答案很明顯(心中竊喜),看來方向找對了,
既然混淆了,那就應該解混淆,網上js在線解混淆的網站一堆,我就不示范了,不會就去百度,
得到解混淆后的js代碼,搜索關鍵引數access,恍然大悟,

果然是md5加密沒錯,只要我們模仿該加密方式,生成引數access,不就可以向后端請求資料了嗎?

經過一番折騰,確實拿到資料,可這資料該怎么用?

可以發現前端圖片鏈接都是通過getUrl這個函式生成的,那么我們可以去js中搜索看看,

果然在這了,if判斷猜想一下,應該一個是原圖一個是縮略圖的鏈接,按照該方法生成鏈接即可,大致思路就這了,博主已經碼不動了,如果覺得有用,點贊支持是我最大的動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/197630.html
標籤:java
