JB的Python之旅-爬取phizhub網站

jb發表於2019-02-21

前言

先說明,本文是水文,跟Python也沒關係的,寫著Python,是因為jb用py寫爬蟲比較多;

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

講故事啦

為什麼要說這事,是因為今早在某群看到有同學問,訪問介面沒有資料,是啥問題;

image.png-73.2kB

第一反應就是,請求引數不對,但接著該同學說,引數都一樣的,還是沒資料;

image.png-41.8kB

剛好看到了,就試試吧,開啟首頁,是個表情包的網站,夠騷的~

image.png-69.5kB

常規操作,Chrome F12-network,選擇XHR,現在一般網站都是ajax載入圖片的,所以直接選擇xhr了,重新整理網頁,這不就有資料了嗎?

image.png-47.6kB

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

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模擬一波,按照上面看到的引數搞一波,發現還是沒有資料:

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

相關文章