【Python項目實戰】爬蟲核心技術-有道翻譯js逆向解析,再也不作一個基礎的爬蟲代碼書寫者!❤️| 8月更文挑戰

有道翻譯js逆向解析

爬取目標

網址:有道翻譯 image.pngpython

工具使用

開發工具:pycharmweb

開發環境:python3.7, Windows10編程

使用工具包:requests,random,hashlibjson

重點學習內容

  • 網絡請求的發送
  • js代碼調試
  • js代碼解析逆向

項目思路解析

先區分數據的加載方式 請求數據時網址是沒有變化的 經過抓包獲取到動態數據markdown

找到對應的數據接口 獲取到網頁的請求接口 請求方法是post請求cookie

image.png

post須要提交的數據網絡

image.png

能夠明顯看出salt是時間戳 多個請求的數據進行比較 只有sign值是在不斷變化的加密數據 找到數據的加密規則 找到加密文件dom

image.png

打上斷點找到對應加密數據的位置 調試代碼進入斷點ide

image.png

sign值是由r.sign得來的 找到r的生成方式工具

image.png

找到最終的加密數據的位置

image.png

ts爲時間戳

salt爲時間戳加一個隨機數 sign爲MD5的加密方法生成的數據 sign是由時間戳的改變而改變的

明確加密的方式剩下的就是書寫代碼了

簡易源碼分析

import time
import random
import hashlib



def main():
    """主程序"""
    url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    headers = {
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
        'Origin': 'http://fanyi.youdao.com',
        'Referer': 'http://fanyi.youdao.com/',
        'Cookie': 'OUTFOX_SEARCH_USER_ID=-1808168645@10.108.160.208; JSESSIONID=aaaRyVJv8oEwg7dPaWrux; OUTFOX_SEARCH_USER_ID_NCOO=704285648.1294403; ___rl__test__cookies=1602406917270'
    }
    i = input("請輸入你要的數據:")
    """獲取參數"""
    lts = str(int(time.time()*100))
    salt = lts + str(random.randint(0, 9))

    content = "fanyideskweb" + i + salt + "]BjuETDhU)zqSxf-=B#7m"
    sign = hashlib.md5(content.encode("utf-8")).hexdigest()
    data = {
        'action': 'FY_BY_CLICKBUTTION',
        'bv': '9caf244986fe6d1de38207408302e500',
        'client': 'fanyideskweb',
        'doctype': 'json',
        'from': 'AUTO',
        'i': i,
        'keyfrom': 'fanyi.web',
        'lts': lts,
        'salt': salt,
        'sign': sign,
        'smartresult': 'dict',
        'to': 'AUTO',
        'version': '2.1'
    }
    response = requests.post(url=url,headers=headers,data=data)
    print(response.json()["translateResult"][0][0]["tgt"])



if __name__ == '__main__':
    main()
複製代碼

我是**白又白i**,一名喜歡分享知識的程序媛❤️

若是沒有接觸過編程這塊的朋友看到這篇博客,發現不會的或者想要學習Python的,能夠直接留言或者私我【很是感謝你的點贊、收藏、關注、評論,一鍵四連支持】

相關文章
相關標籤/搜索