版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37886429/article/details/84938045
一、登陆搜狗翻译页面,分析请求
1、url地址:https://fanyi.sogou.com/
在里面输入中文翻译
可以看出,请求的地址为 https://fanyi.sogou.com/reventondc/translateV1
2、输入英文翻译
综合上述分析,当改变里面内容时,Form Data(向后台发送的数据)中to、uuid、s的值在变化,其他几个没有变化
二、找到请求的JS
主要是 https://dlweb.sogoucdn.com/translate/pc/static/js/vendor.99283d15.js
三、从JS中分析相关内容
从 uuid的值 “a953132c-77de-4029-95df-d592d4cd9bfa” 可以分析出来,这个大体是 16 进制的格式,于是从下面开始找相应的算法:
F 的加密算法,主要是下面有一些 md5 的字眼,所有我大致推测应该是做的md5格式的加密。
四、构造Form Data 信息
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import math, random, hashlib, re,requests
def translate(content):
'''
加密:var F = s("" + L + O + B + "front_9ee4f0a1102eee31d09b55e4d66931fd")
L:from
O:to
B:文本内容
'''
# 判断输入是中文还是英文
zhPattern = re.compile(u'[\u4e00-\u9fa5]+') # 匹配中文
match = zhPattern.search(content) #判断用户输入的是不是中文
if match:
O = 'en'
else:
O = 'zh-CHS'
#构建uuid
M = []
for i in range(9):
M.append(hex(math.floor((random.random() + 1) * 65536)).split('0x1')[1])
uuid = M[0] + M[1] + '-' + M[2] + '-' + M[3] + '-' + M[4] + '-' + ''.join(M[-3:])
#构建加密算法
sign = '' + 'auto' + O + content + 'front_9ee4f0a1102eee31d09b55e4d66931fd'
m = hashlib.md5()
m.update(sign.encode('utf-8'))
data = {
"from": "auto",
"to": O,
"client": "pc",
"fr": "browser_pc",
"text": content,
"pid": "sogou-dict-vr",
"useDetect": "on",
"useDetectResult": "on",
"needQc": 1,
"uuid": uuid,
"oxford": "on",
"isReturnSugg": "on",
"s": m.hexdigest(),
}
#发送相关请求
url = "https://fanyi.sogou.com/reventondc/translateV1"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
}
res = requests.post(url=url,headers=headers,data=data).json()
print(res['data']['translate']['dit'])
# translate('hello world')
translate('我的故乡')
五、利用tkinter组件构建可视化窗口
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from tkinter import *
import math, random, hashlib, re,requests
def translate():
'''
加密:var F = s("" + L + O + B + "front_9ee4f0a1102eee31d09b55e4d66931fd")
L:from
O:to
B:文本内容
'''
entry1.delete(0, END)
content = entry.get()
# 判断输入是中文还是英文
zhPattern = re.compile(u'[\u4e00-\u9fa5]+') # 匹配中文
match = zhPattern.search(content) #判断用户输入的是不是中文
if match:
O = 'en'
else:
O = 'zh-CHS'
#构建uuid
M = []
for i in range(9):
M.append(hex(math.floor((random.random() + 1) * 65536)).split('0x1')[1])
uuid = M[0] + M[1] + '-' + M[2] + '-' + M[3] + '-' + M[4] + '-' + ''.join(M[-3:])
#构建加密算法
sign = '' + 'auto' + O + content + 'front_9ee4f0a1102eee31d09b55e4d66931fd'
m = hashlib.md5()
m.update(sign.encode('utf-8'))
data = {
"from": "auto",
"to": O,
"client": "pc",
"fr": "browser_pc",
"text": content,
"pid": "sogou-dict-vr",
"useDetect": "on",
"useDetectResult": "on",
"needQc": 1,
"uuid": uuid,
"oxford": "on",
"isReturnSugg": "on",
"s": m.hexdigest(),
}
#发送相关请求
url = "https://fanyi.sogou.com/reventondc/translateV1"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
}
res = requests.post(url=url,headers=headers,data=data).json()
response = res['data']['translate']['dit']
rest.set(response)
def sougou_translate():
# 创建窗口
root = Tk()
# 窗口标题
root.title("中英互译")
# 窗口大小、小写x
root.geometry('390x100+500+300')
# 标签控件
lable = Label(root, text="请输入要翻译的内容:", font=("微软雅黑"), fg="red")
lable.grid()
lablel1 = Label(root, text="翻译后的内容为:", font=("微软雅黑"), fg="green")
lablel1.grid()
global rest
rest = StringVar()
# 输入控件
global entry
entry = Entry(root, font=("微软雅黑", 14))
entry.grid(row=0, column=1)
# 翻译之后的结果
global entry1
entry1 = Entry(root, font=("微软雅黑", 14), textvariable=rest)
entry1.grid(row=1, column=1)
# 按钮控件 sticky对齐方式 N S E W - 上下左右
button = Button(root, text="翻译", font=("微软雅黑", 13), command=translate)
button.grid(row=2, column=0, sticky=W,padx=10)
button1 = Button(root, text="退出", font=("微软雅黑", 13), command=root.quit)
button1.grid(row=2, column=1, sticky=E,padx=10)
# 消息循环、显示窗口
root.mainloop()
if __name__ == '__main__':
sougou_translate()