前言
先說明,本文是水文,跟Python也沒關係的,寫著Python,是因為jb用py寫爬蟲比較多;
本文只是簡單介紹個網站如何爬蟲的思路,文章很短,1分鐘看完,沒啥特別的,完~
講故事啦
為什麼要說這事,是因為今早在某群看到有同學問,訪問介面沒有資料,是啥問題;
第一反應就是,請求引數不對,但接著該同學說,引數都一樣的,還是沒資料;
剛好看到了,就試試吧,開啟首頁,是個表情包的網站,夠騷的~
常規操作,Chrome F12-network,選擇XHR,現在一般網站都是ajax載入圖片的,所以直接選擇xhr了,重新整理網頁,這不就有資料了嗎?
逐個點選看返回的內容,不難找到圖片地址;
這樣,介面地址也出來了:
http://www.phizhub.com/phiz/get_phiz_list/?category=-1&page=1&last_time=0&page_size=40
複製程式碼
後面的引數,不糾結,把這個地址放到Chrome上訪問,發現居然是沒資料:
行吧,可能是因為請求時需要特定的引數,用postman模擬一波,按照上面看到的引數搞一波,發現還是沒有資料:
一開始以為引數不對或者有遺漏,檢查一遍發現還是不行,那就說明,可能是伺服器有檢驗機制了;
先看了一下body,那4個引數都很正常,可以排除了;
再看看請求頭,看到一個sss
引數跟timestamp
引數,其他引數看著都正常;
首先,這個sss
可能性很大,因為這命名很奇怪,另外,校驗時間戳,也合理;
重新整理幾次網站,發現這兩個引數都是會變化的,因此更加懷疑了;
每次重新整理都能正常顯示,當時自己模擬的時候又不行,引數肯定是沒錯的,這是不是說明,有時效性限制?
既然有這樣的懷疑,就測試一下吧,重新整理網頁,把sss
跟timestamp
的值複製到postman模擬,經過幾次,偶然發現居然可以的;
同樣的引數,再post一次,發現就返回空資料了,就證實了時效性校驗的機制,而且這個時效性極短,5秒內!
引數邏輯
下面講講這兩個引數的邏輯;
時間戳,一般是當前時間戳,拿去轉化看看,發現就是當前時間,無難度:
問題就在sss
這個玩意,這種情況只能找原始碼,那怎麼看?
首先,返回到這個頁面,此時,紅框裡的就是需要分析的介面;
那把滑鼠移動到右側的jquery-1.8.3.min.js
檔案,此時會彈出一堆js檔案;
逐個找,點選一個你覺得很大可能跟資料有關的檔案,這裡不難看出,就是get_data
,那就點選右側的js檔案吧;
點選後,直接跳轉到這裡,sss
對應的是程式碼的abc
,而abc是get_abc函式生成的,而且需要時間戳做引數;
一般情況下,瀏覽器預設是非除錯狀態,那就點選右上的按鈕,暫停下吧;
點選後,會自動開啟一個檔案,亂七八糟一大堆,不想看;
既然不想看,就返回到剛剛那個js檔案吧,然後把滑鼠移動到get_abc
函式上;
然後點選,邏輯不就出來了嗎?
因此,這兩個引數的邏輯如下:
function current_timestamp(){return(new Date).getTime()};
# 當前時間戳
function get_abc(a){return $.md5("phizhub_abc_"+a)}
# sss就是phizhub_abc_+當前13位時間戳拼接而成的md5
複製程式碼
故事完,可以愉快啪啪啪了,指令碼沒有,純提供分析思路;
小結
看吧,都說是水文,你還不信?
本文也沒講到啥,只是現在爬蟲的門檻會越來越高,而學會怎麼找js原始碼,算是當今爬蟲必備的技能了,希望對你有幫助~
謝謝大家~