前言:最近爲了學習頭條的加密代碼,自己對signature as cp 的生成過程進行了研究和學習。
一、接口的尋找
1.目的是爲了獲取頭條號用戶的文章數據,要訪問的是這個頁面
https://www.toutiao.com/c/user/104246645773/
2.進行抓包分析
發現這個是我們需要的數據
3.對接口進行分析,發現是get請求,需要帶下面幾個參數
二、as, cp 參數的破解
- 分析as cp 的生成過程
全局搜索 as: 或者cp:
- 點擊去對JS格式化後,文件中搜索as: 發現下面,生成as cp的代碼
三、signature 參數的破解
1.全局搜索signature關鍵字
2.signature 參數是由 utils.tacSign() 生成的,你可以去構造utils對象,或者去分析tacSign方法
3.打斷點調試,進入到tacSign方法裏面
4.對tacSign 打斷點調試,發現傳入的兩個參數e 是url的前綴,t是get請求的參數,構造出來一個o對象
5.調用window.byted_acrawler.sign(o) 生成了祕鑰signature,現在關鍵是對sign這個方法進行破解
6.在console中輸入window.byted_acrawler.sign 在vm中找到sign的執行函數
7.把這個TAC function全部複製出來,
8.我們把構造好的o對象用 window.byted_acrawler.sign(o)去執行,就生成了signature
9.用node執行JS的時候會各種報錯,我們添加上一些windows或者document對象的屬性,在裏面添加navigator location 和body和cookie屬性
10.會生成這樣一個鏈接,拿個這個鏈接攜帶cookie就可以獲取到內容了
11.signature 還有一種是比較長的,長sign不用攜帶cookie可以直接獲取數據,長signature的獲取先需要執行 頁面中的一段JS代碼,初始化一下,用純JS執行的時候會報錯缺少屬性,會對瀏覽器特徵進行檢測。
四、請求cookie尋找
- 短連接請求的時候要攜帶cookie,這個cookie可以用selenium隨便訪問一個頭條用戶鏈接,cookie的失效時間很長,基本不用更換
五、獲取到文章的標識media_id
- 解析出文章的唯一標識
- 拼接成詳情頁的鏈接 https://www.toutiao.com/i6824408619564401163/
六、文章詳情頁接口的破解(__ac_nonce, __ac_signature)加密
- 通過抓包工具抓包發現,沒有cookie訪問詳情頁鏈接的時候,會返回下面一段代碼,從cookie中獲取__ac_nonce 使用ac_nonce 生成 __ac_signature
- 使用selenium 訪問詳情頁獲取到這一對cookie,失效時間是半個小時左右,攜帶這對cookie成功獲取到詳情頁
-內容在頁面的源代碼裏,用正則解析
如果對採集方案感興趣或者對JS加密有興趣的,可以加我qq: 330446875 學習交流(註明:CSDN頭條爬蟲)