python爬蟲之js逆向(二)

進擊的醜胖發表於2019-11-05

python爬蟲之js逆向(二)

寫在前面

每天一更,養成好習慣從我做起。真正想做成一件事,不取決於你有多少熱情,而是看你能多久堅持。千萬別奢望光有熱情就能得償所願。

網站分析

今天的帶大家瞭解一下md5加密,目標網站是有道翻譯:http://fanyi.youdao.com/
首先第一步開啟網址(我用的是google)f12,檢視是否是post請求,隨便輸入一個字,右擊檢視網頁原始碼,ctrl+f檢視是否有你想要的結果,沒有那麼ok,肯定不是get請求。(可能有點片面,有錯請大佬即時指出,感激不盡)。在這裡插入圖片描述
ok我們在這裡可以看到請求的網址加POST請求
再接著往下看
在這裡插入圖片描述
然後這是我們所需要複製的請求頭,在這可以教大家一個快速給請求頭新增格式的方式,複製請求頭到pycharm裡,然後使用ctrl+r快捷鍵開啟替換功能,並勾選Regex

替換源為:(.):\s(.)$

替換為:"$1": “$2”,

"$1": "$2",
最後再ctrl+alt+L鍵,整理一下格式就行了

接下來進入正題,看好了,最最最重點的地方來嘍。
看我們下面的在這裡插入圖片描述
看Form data 的請求引數:
salt: 15729403285424
sign: 9fc6c309e0686edbbc3262034face7da
ts: 1572940328542
bv: 6ba427a653365049d202e4d218cbb811

這四個看著都是加密過來的 我們需要一個個的來看,首先全域性搜尋salt
在f12下全域性搜尋 可以按ctrl+shift+f 最下面會出現一個搜尋框我們只需將salt複製進去,搜尋就會出現所有包含這個單詞的檔案
在這裡插入圖片描述
那麼我們點進去看一下
在這裡插入圖片描述
ok那麼我們可以清晰地看都之前的四個引數的資料都在這裡

ts 是獲取了當前的時間戳
bv是 MD5 加密
salt 隨機數
sign是 MD5 加密
在這裡插入圖片描述

可以看到bv只是請求頭的md5加密
r = “” + (new Date).getTime()
i = r + parseInt(10 * Math.random(), 10)
轉成python生成就是(通過看其他大佬寫的發現,之前還是將四個引數全部放上去):
i = str(time.time()*1000 + random.randint(1, 10))

接下來就是程式碼實現,很簡單的程式碼:

import requests
import random
import time
import hashlib

headers={
        "Cookie": "OUTFOX_SEARCH_USER_ID=760236899@61.181.7.3; P_INFO=guanjingtao1@126.com|1570869772|0|other|11&15|tij&1570868005&carddav#tij&null#10#0#0|139090&0||guanjingtao1@126.com; JSESSIONID=aaa-VPo4LHTMo-fd09q4w; OUTFOX_SEARCH_USER_ID_NCOO=772066246.9827566; ___rl__test__cookies=1572245122603",
        "Referer": "http://fanyi.youdao.com/",
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
        }
data = {
    "i": "look",
    "client": "fanyideskweb",
    "keyfrom": "fanyi.web",
}
i = str(time.time()*1000 + random.randint(1, 10))
e=input("請輸入單詞>>")
tmp="fanyideskweb" + e + i + "n%A-rKaT5fb[Gy?;N5@Tj"
sign=hashlib.md5(tmp.encode('utf-8')).hexdigest()
data['i']=e
data['salt']=i
data['sign']=sign
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
res = requests.post(url,headers=headers, data=data)
print(res.text)

博主也是一個剛剛開始學習的小白,有錯誤希望大佬指導,希望大家一起學習進步。有想探討的問題可以評論我加你。

相關文章