點擊翻譯按鈕,查看網絡請求,如圖
共有四個網絡請求,經過分析,查看返回的信息,顯然第一個是真正的翻譯請求,具體信息以下:
如圖所示,咱們真正關注的是請求參數,在這麼多的參數當中,其中,i
是須要翻譯的詞語,經過對多個翻譯請求分析知道,from
是翻譯原文語言,to
是翻譯的目標語言,剩下的除了salt
,sign
以外的都是固定的,所以,如今問題是salt
,sign
是怎麼來的前端
經過前端的斷點分析,找到發送網絡請求的代碼,具體以下:
顯然,salt
是一個時間戳加上隨機數獲得"" + ((new Date).getTime() + parseInt(10 * Math.random(), 10))
,sign
是一個md5加密的字符串,顯然,只有模擬出這兩個參數就能夠了git
# -*- coding: UTF-8 -*- import hashlib import random import requests import time s = requests.Session() m = hashlib.md5() class Dict: def __init__(self): self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Referer': 'http://fanyi.youdao.com/', 'contentType': 'application/x-www-form-urlencoded; charset=UTF-8' } self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=' self.base_config() def base_config(self): """ 設置基本的參數,cookie """ s.get('http://fanyi.youdao.com/') def translate(self): i = '你好' salf = str(int(time.time() * 1000) + random.randint(0, 9)) n = 'fanyideskweb' + i + salf + "rY0D^0'nM0}g5Mm1z%1G4" m.update(n.encode('utf-8')) sign = m.hexdigest() data = { 'i': i, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': salf, 'sign': sign, 'doctype': 'json', 'version': "2.1", 'keyfrom': "fanyi.web", 'action': "FY_BY_DEFAULT", 'typoResult': 'false' } resp = s.post(self.url, headers=self.headers, data=data) return resp.json() dic = Dict() resp = dic.translate() print(resp)
項目地址: 基於Python的爬蟲
QQ交流羣: 173318043web