网址:
分析:
通过对网页结构分析发现,这个网页是用js加密的,所以:
一:通过抓包工具抓取不同单词对应的数据包进行数据请求参数的比对,发现只有如下三个参数需要进行动态处理-(salt,lts,sign)
二:通过对sign进行全局搜索:
接着进行局部搜索:
打断点发现该sign值是我们需要的,所以:
-sign的值是经过md5加密,加密的时候使用到了两个变量。 -e:需要翻译的单词,-i:字符串形式的js时间戳+1位数的随机整数(i是一个字符串类型的数据)-备注:(python的时间戳*1000=js时间戳)
三:接下来改写代码:
我这里用的是js发条:
先把调用函数写好。
接着进入md5函数中,如上文,该加密方式是用md5加密的。
然后对该调用函数进行粘贴复制:
最后改写成功,获得了我们想要的sign值(注:这里有一些参数是在pycharm中实现的)
四:接下来在pycharm中改写函数:
使用的数据库有:
import requests
import execjs
import random
import time
execjs这个库需要自己安装。
然后对时间戳进行处理:
e = input('enter a English word:')
r = str(int(time.time()*1000))
i = str(int(time.time()*1000))+str(int(random.random()*10))
注:time.time()*1000就是python的时间戳
最后就是写整体代码,调用js文件:
node = execjs.get()
ctx = node.compile(open('./youdao.js',encoding='utf-8').read())
funcName = "getSign('{0}','{1}')".format(e,i)
sign = ctx.eval(funcName)
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62",
"Referer":"https://fanyi.youdao.com/",
"Cookie":"OUTFOX_SEARCH_USER_ID=1126848928@10.110.96.153; JSESSIONID=aaaStRaETzLCbfYrYCa6x; OUTFOX_SEARCH_USER_ID_NCOO=1327853885.097192; ___rl__test__cookies=1642832654565"}
data = {'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': '3c2c16e00dc6f2c6dfe859fcd6ef9592',
'doctype': 'json',
'version': 2.1,
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
result = requests.post(url,headers=headers,data=data).json()
print(result)
就得到了preview中的内容了
最后的最后,附上源代码:
import requests
import execjs
import random
import time
e = input('enter a English word:')
r = str(int(time.time()*1000))
i = str(int(time.time()*1000))+str(int(random.random()*10))
node = execjs.get()
ctx = node.compile(open('./youdao.js',encoding='utf-8').read())
funcName = "getSign('{0}','{1}')".format(e,i)
sign = ctx.eval(funcName)
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62",
"Referer":"https://fanyi.youdao.com/",
"Cookie":"OUTFOX_SEARCH_USER_ID=1126848928@10.110.96.153; JSESSIONID=aaaStRaETzLCbfYrYCa6x; OUTFOX_SEARCH_USER_ID_NCOO=1327853885.097192; ___rl__test__cookies=1642832654565"}
data = {'i': e,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': i,
'sign': sign,
'lts': r,
'bv': '3c2c16e00dc6f2c6dfe859fcd6ef9592',
'doctype': 'json',
'version': 2.1,
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
result = requests.post(url,headers=headers,data=data).json()
print(result)
拜拜。希望各位在这篇博客中可以学到东西!