"""
有道反扒一直再改变,加深。浪费我一段时间;;;
通过查找,能找到js代码中的操作代码
1.这是计算salt的公式,在fanyi.min.js文件中找到的,
t = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10));
2.n.md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE")
md5一共需要四个参数,第一个和第四个都是固定的字符串,第三个是所谓的salt。第二个就是输入的要查找的单词
"""
def getSalt():
"""
这是计算salt的公式 "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10));
把它翻译成Python代码
:return:
"""
import time,random
# (new Date).getTime()生成的时间戳与time.time()的单位不一致,所以需要乘1000
salt = str(int(time.time()*1000)) + str(random.randint(0,10))
ts = int(time.time()*1000)
return salt,ts
def getMd5(v):
import hashlib
md5 = hashlib.md5()
# 需要一个bytes格式的参数
md5.update(v.encode("utf-8"))
sign = md5.hexdigest()
return sign
def getSign(key, salt):
sign = "fanyideskweb" + key + str(salt[0]) + "@6f#X3=cCuncYssPsuRUE"
bv = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
sign = getMd5(sign)
bv = getMd5(bv)
return sign,bv
from urllib import request,parse
def youdao(key):
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule "
salt = getSalt()
data = {
"i": key,
"from": "id",
"to": "zh-CHS",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": str(salt[0]),
"sign": getSign(key, salt)[0],
"ts": str(salt[1]),
"bv": getSign(key, salt)[1],
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
# 参数data需要是bytes格式
data = parse.urlencode(data).encode('utf-8')
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
#不能加,加上报请求头错误错
# "Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Length": len(data),
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "OUTFOX_SEARCH_USER_ID=-179075867@117.159.15.221; P_INFO=l542684416@163.com|1550109535|0|other|00&99|hen&1550053607&urs#hen&410000#10#0#0|&0|urs|l542684416@163.com; JSESSIONID=aaah-7I2JcBp9d3hhczUw; OUTFOX_SEARCH_USER_ID_NCOO=925083748.2690873; ___rl__test__cookies=1561650099798",
"Host": "fanyi.youdao.com",
"Origin":"http://fanyi.youdao.com",
"Referer":"http://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"X-Requested-With": "XMLHttpRequest"
}
#添加一个IP池
px = request.ProxyHandler({'https':'112.87.65.117:9999'})
opener = request.build_opener(px)
req = request.Request(url=url, data=data, headers=headers)
res = opener.open(req)
# rsp = request.urlopen(res)
html = res.read().decode('utf-8')
# print(html)
html = eval(html)
su = html["translateResult"][0][0]['tgt']
return su
#
# youdao(' Keuangan AJB Bumiputera negatif Rp 20 triliun, ini klarifikasi OJK ')