該文章主要提供交流學(xué)習(xí)使用,請(qǐng)勿利用其進(jìn)行不當(dāng)行為!
如本篇文章侵犯了貴公司的隱私,請(qǐng)聯(lián)系我立刻刪除!
由于最近比較忙,暫時(shí)沒(méi)有更新,這段時(shí)間會(huì)及時(shí)更新的
現(xiàn)如今自媒體風(fēng)聲水起,很多人現(xiàn)在都在從事著自媒體行業(yè),游戲宣傳,影視宣傳,等等,都在以文章形式傳播。
那今天分享一下今日頭條的是哪個(gè)參數(shù)的生成思路,以今日頭條推薦為例,我們進(jìn)行抓包調(diào)試。
首先清楚我們要的加密參數(shù)名為:signature 然后全局搜索:
接下來(lái)咱們通過(guò)CTRL+F快捷鍵進(jìn)行全局搜索signature參數(shù):
我們可以看到,在搜索結(jié)果中有一個(gè)js加密文件:lib_xxx.js ,我們通過(guò)網(wǎng)站目錄打開(kāi)它
接下來(lái)依次點(diǎn)擊上方的Sources打開(kāi)網(wǎng)站目錄,從左側(cè)欄依次點(diǎn)擊,找到lib_xxx.js文件,打開(kāi)后的js文件可讀性極差,需要點(diǎn)擊下方格式化按鈕{ } 。
# 完整python調(diào)用代碼
import time
import execjs
import asyncio
from pyppeteer import launch
from urllib.parse import quote
def get_js():
f = open("sign.js", 'r', encoding='utf-8') # 打開(kāi)JS文件
htmlstr = f.read()
return htmlstr
def get_des_psswd(e, c):
js_str = get_js()
ctx = execjs.compile(js_str) # 加載JS文件
return (ctx.call('get_page', e[0], c)) # 調(diào)用js方法 第一個(gè)參數(shù)是JS的方法名,后面的e和c是js方法的參數(shù)
async def main(key):
browser = await launch(
# headless=False
) # 將headless參數(shù)設(shè)為False,則變成有頭模式
page = await browser.newPage()
# 設(shè)置頁(yè)面視圖大小
await page.setViewport(viewport={'width': 1280, 'height': 800})
# 是否啟用JS,enabled設(shè)為False,則無(wú)渲染效果
await page.setJavaScriptEnabled(enabled=True)
await page.goto('https://www.toutiao.com/search/?keyword={}'.format(quote(key)))
itmes = await page.cookies()
cookie = ''
for itme in itmes:
name = itme['name']
value = itme['value']
cookie = cookie + name + '=' + value + ';'
# 關(guān)閉瀏覽器
await browser.close()
return cookie[:-1]
def get_cookie(key):
print('正在獲取cookie...')
return asyncio.get_event_loop().run_until_complete(main(key))
if __name__ == '__main__':
key = '搜索關(guān)鍵字'
cookie = get_cookie(key)
url = [
'https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword={}&autoloa'
'd=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis×tamp={}'.format(quote(key),time.time())
]
url.append(get_des_psswd(e=url, c=cookie)) # 生成signature
iurl = '&_signature='.join(url) # 合成帶sign的api接口
print('api_url:', url[1]) # 完整的api接口
print('signature:', iurl) # signature加密串
print('cookie:', cookie) # 模擬用戶cookie