JB的Python之旅-爬取phizhub網站

前言

先說明,本文是水文,跟Python也不要緊的,寫着Python,是由於jb用py寫爬蟲比較多;jquery

本文只是簡單介紹個網站如何爬蟲的思路,文章很短,1分鐘看完,沒啥特別的,完~ajax

講故事啦

爲何要說這事,是由於今早在某羣看到有同窗問,訪問接口沒有數據,是啥問題; 瀏覽器

image.png-73.2kB

第一反應就是,請求參數不對,但接着該同窗說,參數都同樣的,仍是沒數據; bash

image.png-41.8kB

恰好看到了,就試試吧,打開首頁,是個表情包的網站,夠騷的~ 服務器

image.png-69.5kB

常規操做,Chrome F12-network,選擇XHR,如今通常網站都是ajax加載圖片的,因此直接選擇xhr了,刷新網頁,這不就有數據了嗎? 函數

image.png-47.6kB

逐個點擊看返回的內容,不難找到圖片地址; post

image.png-208.9kB

這樣,接口地址也出來了:測試

http://www.phizhub.com/phiz/get_phiz_list/?category=-1&page=1&last_time=0&page_size=40
複製代碼

後面的參數,不糾結,把這個地址放到Chrome上訪問,發現竟然是沒數據: 網站

image.png-29.5kB

行吧,多是由於請求時須要特定的參數,用postman模擬一波,按照上面看到的參數搞一波,發現仍是沒有數據: ui

image.png-94.1kB

一開始覺得參數不對或者有遺漏,檢查一遍發現仍是不行,那就說明,多是服務器有檢驗機制了;

先看了一下body,那4個參數都很正常,能夠排除了;

image.png-14.2kB

再看看請求頭,看到一個sss參數跟timestamp參數,其餘參數看着都正常;

image.png-69.8kB

首先,這個sss可能性很大,由於這命名很奇怪,另外,校驗時間戳,也合理;

刷新幾回網站,發現這兩個參數都是會變化的,所以更加懷疑了;

每次刷新都能正常顯示,當時本身模擬的時候又不行,參數確定是沒錯的,這是否是說明,有時效性限制

既然有這樣的懷疑,就測試一下吧,刷新網頁,把ssstimestamp的值複製到postman模擬,通過幾回,偶然發現竟然能夠的;

image.png-102.9kB

一樣的參數,再post一次,發現就返回空數據了,就證明了時效性校驗的機制,並且這個時效性極短,5秒內!

參數邏輯

下面講講這兩個參數的邏輯;

時間戳,通常是當前時間戳,拿去轉化看看,發現就是當前時間,無難度:

image.png-10.8kB

問題就在sss這個玩意,這種狀況只能找源碼,那怎麼看?

首先,返回到這個頁面,此時,紅框裏的就是須要分析的接口;

image.png-90.8kB

那把鼠標移動到右側的jquery-1.8.3.min.js文件,此時會彈出一堆js文件;

image.png-108.5kB

逐個找,點擊一個你以爲很大可能跟數據有關的文件,這裏不難看出,就是get_data,那就點擊右側的js文件吧;

image.png-30.6kB

點擊後,直接跳轉到這裏,sss對應的是代碼的abc,而abc是get_abc函數生成的,並且須要時間戳作參數;

image.png-46.1kB

通常狀況下,瀏覽器默認是非調試狀態,那就點擊右上的按鈕,暫停下吧;

image.png-135.8kB

點擊後,會自動打開一個文件,亂七八糟一大堆,不想看;

image.png-247.4kB

既然不想看,就返回到剛剛那個js文件吧,而後把鼠標移動到get_abc函數上;

image.png-19.1kB

而後點擊,邏輯不就出來了嗎?

image.png-9.2kB

所以,這兩個參數的邏輯以下:

function current_timestamp(){return(new Date).getTime()};
# 當前時間戳

function get_abc(a){return $.md5("phizhub_abc_"+a)}
# sss就是phizhub_abc_+當前13位時間戳拼接而成的md5
複製代碼

故事完,能夠愉快啪啪啪了,腳本沒有,純提供分析思路;

小結

看吧,都說是水文,你還不信?

本文也沒講到啥,只是如今爬蟲的門檻會愈來愈高,而學會怎麼找js源碼,算是當今爬蟲必備的技能了,但願對你有幫助~

謝謝你們~

1-140R3154U8.jpg-9kB
相關文章
相關標籤/搜索