網絡爬蟲-今日頭條__ac_signature參數逆向(第二彈)

今天要講的是今日頭條web版的__ac_signature參數逆向

這次應該是最近剛更新的一個反爬,受朋友委託幫忙查看,跟上次的解決方式差不多,算法方面基本一致。先放上一篇文章的鏈接

網絡爬蟲-今日頭條_signature參數逆向

具體如何找到加密算法以及斷點調試等可以參考上一篇文章,我這邊主要講一下有哪些坑吧。

從上一篇的接口中我們可以拿到一些比如“https://www.toutiao.com/i6824014300391145991/”這樣的詳情頁鏈接,當我們通過session去訪問這些鏈接的時候 會發現並不是直接返回的原文內容 而是一串js代碼 如下圖

在這裏插入圖片描述

<html><head><meta charset="UTF-8" /></head><body></body><script src='https://sf1-ttcdn-tos.pstatp.com/obj/rc-web-sdk/acrawler.js'></script><script>window.byted_acrawler.init({aid:99999999,dfp:!0});var b;a:{for(var c=document.cookie.split(/[;&]/),d,e=0;e<c.length;e++){for(d=c[e];" "===d.charAt(0);)d=d.substring(1,d.length);if(0===d.indexOf("__ac_nonce=")){b=d.substring(11,d.length);break a}}b=""}var f=b;var g=window.byted_acrawler.sign("",f);document.cookie="__ac_signature=; expires=Mon, 20 Sep 1970 00:00:00 UTC; path=/;";
document.cookie="__ac_signature="+g+"; expires="+(new Date((new Date).getTime()+18E5)).toGMTString()+"; path=/;";window.location.reload();</script></html>

我這裏把這個代碼給貼下來了 有點js基礎的同學應該可以很容易理解 這個實際上就是拿到cookie中的__ac_nonce字段 然後調用window.byted_acrawler.sign("",“cookie字段”)然後賦值給__ac_signature=拼接成新的cookie再刷新頁面,大致就是這樣的一個流程 那麼這樣的話就很簡單了

我們首先拿到第一次頁面返回的cookie裏面的__ac_nonce字段

import requests

ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'

headers = {
    "User-Agent": ua,
}

s = requests.Session()
url = 'https://www.toutiao.com/i6824014300391145991/'

resp = s.get(url, headers=headers)
print(resp.text)
resp_cookie = resp.cookies.get_dict()
x = resp_cookie['__ac_nonce']
print(x)

在這裏插入圖片描述

然後把之前封裝的接口稍微改一下 改爲window.byted_acrawler.sign("",“cookie字段”)即可

在這裏插入圖片描述

然後再用python調用該方法即可,我這邊比較喜歡用node封裝接口的方式(因爲方便調試且坑比較少),直接調用接口傳遞cookie第一個字段然後計算出第二個字段就行了。

在這裏插入圖片描述

data = {
    "cookie": x
}
r = requests.post('http://121.40.96.182:4006/get_sign', data=data)
__ac_signature = r.json()['signature']
Cookie = '__ac_nonce=' + x + '; ' + '__ac_signature='+ __ac_signature
print(Cookie)
headers.update(
    {
        "Cookie": Cookie
    }
)

resp = s.get(url=url, headers=headers).text
print(resp)

在這裏也給小夥伴們提供一個免費開放的接口:

http://121.40.96.182:4006/get_sign

上篇文章鏈接網絡爬蟲-今日頭條_signature參數逆向


Ending

Github傳送門

持續更新ing (歡迎各種star與fork)

聯繫方式: 442891187(QQ)

如有權益問題可以發私信聯繫我刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章