數據抓取,網站怎麼找到加密轉換的那段js函數?

要鍛煉一下抓取數據的能力,就隨便找了一個網站「創世/中文/小說網」,通過包找到了相應的代碼,但需要轉換,自己不會,問了他人,最後幫我找到了這個「function _decryptByBaseCode(text, base) {

if (!text) {

return text;

}

var arrStr = []

, arrText = text.split("\");

for (var i = 1, len = arrText.length; i &< len; i++) {

arrStr.push(String.fromCharCode(parseInt(arrText[i], base)));

}

return arrStr.join("");

}」,(已試過就是這個加密函數,這個JS文件需要具體進入到閱讀的那一章節)問他怎麼找到的,他說通常是js文件里加密,至於怎麼找到的,只給我一個遇到多了有經驗就會,然後沒了。現在遇到了許多類似需要轉換的網站(hbooker/com,這幾天一直卡在具體內容這邊,包找到了,加密方法也大約知道但模糊不怎麼會用。。。),卻不懂怎麼弄,哪位大神有比較好的方法或者流程,告知一下,求大神幫忙!!!謝謝!!


看了下網站,沒找到你說的代碼,我這裡拿網易雲音樂演示。

  • 網易雲音樂web版獲取歌曲評論時,參數在前端有加密的。打開告白氣球 - 周杰倫 - 單曲 - 網易雲音樂,打開控制台。選擇Network,勾選上Preserve log
  • 點擊下一頁,找到對應請求,滑鼠移動到對應請求的Iintiator列,會看到該請求的函數調用棧,點擊第一個函數。如下圖

  • 以上操作後會進入到一個js文件中,代碼一般都經過壓縮。選擇代碼庫左下角大括弧格式化代碼。如下圖

  • 點擊之後會看到格式化後的代碼,此時會有代碼被黃色標記。該代碼便是發出http請求的代碼,點擊行號打上斷點,打上斷點後BreakPoints會有記錄,我這裡是3516行。如下圖

  • 打上斷點後,回過來操作網頁。繼續選擇下一頁,這時候會網頁會暫停在上一步打的斷點處,這時候就可以看到完整的函數調用棧了(call stack),這裡的調用深度有20多層,Scope.Local這裡是每個函數裡面的變數值。如下圖。

  • 根據之前http請求發出的參數,來找到對應參數在哪個變數中。網易雲音樂這裡請求攜帶了兩個參數,參數名是params和encSecKey。根據這兩個參數可以輕易找到數據在e3x對象中。然後一直跟蹤這個對象的這兩個值,來確定是在哪一個函數裡面添加的。然後就可以很容易的找到是在哪一個函數裡面加密的,因為x3x.bo3x函數有這兩個參數,而它下一個匿名函數沒有這兩個參數,所以就能確定這兩個參數是在x3x.bo3x函數生成的,然後格式化當前代碼。就可以輕易的看到是window.asrsea這個函數混淆加密的。如下圖

歡迎點贊~~~

最後,我有之前有寫過一篇相關教程,有興趣參考從零實現一個高性能網路爬蟲(二)應對反爬蟲之前端數據混淆 - 卧顏沉默 - 博客園


謝邀,我在這方面也沒有太多的經驗,一靠經驗,二靠運氣吧,我一般碰見這種網站都是用 selenium 這個庫,然後模擬瀏覽器去抓取數據,畢竟我很懶的~.關於 selenium 的安裝可以參考 selenium的安裝與使用 , 具體使用方法可以參考我分享的文件 鏈接: https://pan.baidu.com/s/1bKPZd0 密碼: ektz


可以讀下我的專欄文章

如何破解javascript加密演算法?

使用了google translate網頁的例子,它基本上能用的手法都用上了


@卧顏沉默 大神 ,我自己嘗試了一下,能正確找到了,從這開始

var bAQ6K = window.asrsea(JSON.stringify(j0x), biZ1x(["流淚", "強"]), biZ1x(Pr4v.md), biZ1x(["愛心", "女孩", "驚恐", "大笑"]));

又要來這

window.asrsea = d;

找到這裡

function d(d, e, f, g) {

var h = {}

, i = a(16);

return h.encText = b(d, g),

h.encText = b(h.encText, i),

h.encSecKey = c(i, e, f),

h

}//(d函數又套著(a,b,c......)又一大堆)

//然後要得到 j0x 就需要考慮這個

x0x.bo0x = function(V0x, e0x) {

var j0x = {} // 這裡定義

, e0x = NEJ.X({}, e0x)

, lh4l = V0x.indexOf("?");

if (window.GEnc /(^|.com)/api/.test(V0x) !(e0x.headers e0x.headers[ec2x.wD8v] == ec2x.Ea1x) !e0x.noEnc) {

if (lh4l != -1) {

j0x = k0x.hE3x(V0x.substring(lh4l + 1));

V0x = V0x.substring(0, lh4l)

}

if (e0x.query) {

j0x = NEJ.X(j0x, k0x.fA2x(e0x.query) ? k0x.hE3x(e0x.query) : e0x.query)

}

if (e0x.data) {

j0x = NEJ.X(j0x, k0x.fA2x(e0x.data) ? k0x.hE3x(e0x.data) : e0x.data)

}

j0x["csrf_token"] = x0x.gV3x("__csrf");

V0x = V0x.replace("api", "weapi");

e0x.method = "post";

delete e0x.query;

var bAQ6K = window.asrsea(JSON.stringify(j0x), biZ1x(["流淚", "強"]), biZ1x(Pr4v.md), biZ1x(["愛心", "女孩", "驚恐", "大笑"]));

e0x.data = k0x.de1x({

params: bAQ6K.encText,

encSecKey: bAQ6K.encSecKey

})

}

ctW1x(V0x, e0x)

} // 這個函數就更多其他摻雜進來了 後面更多

//這種情況 就按你說的 使用 selenium 比較合適嗎?


js代碼不做混淆壓縮前提下,直接過下代碼,或者用先驗關鍵詞search,比如code、base、encode、decode等


推薦閱讀:

scrapy 抓取的中文結果亂碼,請問如何解決?
菜鳥學習網路爬蟲的最佳路線是什麼?
爬蟲相關的技能適合放進簡歷裡面嗎?
是否有智能爬蟲,即不需要會寫代碼,只要定義後就可以開始爬蟲了?
哪個開發軟體可以寫python啊,VS可以么?

TAG:數據挖掘 | 爬蟲計算機網路 | 加密解密 |