今天尝试用Python制作翻译软件。在这里给需要的小伙伴们提供代码,并且给出一点小心得。
程序的功能很简单,可以从三个主流翻译器中选择任意的翻译器进行单词和句子的翻译,使用PyQt5模块实现人机交互,用requests模块发送请求,并将翻译结果返回给用户。
Python版本: 3.8
相关模块:
requests模块
re模块
time模块
js2py模块
random模块
hashlib模块
安装Python并添加到环境变量,pip安装需要的相关模块即可。
程序的功能很简单,可以从三个主流翻译器中选择任意的翻译器进行单词和句子的翻译,使用PyQt5模块实现人机交互,用requests模块发送请求,并将翻译结果返回给用户。
用baidu翻译来举例
任意的进行翻译来查看页面信息。
从图片中可以发现这是一个post请求,请求头的数据在的图片中也有较清楚的显示。
'''
User-Agent和Cookie 需要自行添加
Token中的T换成小写t
Function:
翻译类
'''
class baidu():
def __init__(self):
self.session = requests.Session()
self.session.cookies.set('BAIDUID', '19288887A223954909730262637D1DEB:FG=1;')
self.session.cookies.set('PSTM', '%d;' % int(time.time()))
self.headers = {
'User-Agent': 'XXX'
}
self.data = {
'query': '',
'simple_means_flag': '3',
'sign': '',
'Token': '',
}
self.url = 'https://fanyi.baidu.com/v2transapi'
def translate(self, word):
self.data['query'] = word
self.data['token'], gtk = self.getTokenGtk()
self.data['token'] = '6482f137ca44f07742b2677f5ffd39e1'
self.data['sign'] = self.getSign(gtk, word)
res = self.session.post(self.url, data=self.data)
return [res.json()['trans_result']['data'][0]['result'][0][1]]
def getTokenGtk(self):
url = 'https://fanyi.baidu.com/'
res = requests.get(url, headers=self.headers)
token = re.findall(r"token: '(.*?)'", res.text)[0]
gtk = re.findall(r";window.gtk = ('.*?');", res.text)[0]
return token, gtk
def getSign(self, gtk, word):
evaljs = js2py.EvalJs()
js_code = js.bd_js_code
js_code = js_code.replace('null !== i ? i : (i = window[l] || "") || ""', gtk)
evaljs.execute(js_code)
sign = evaljs.e(word)
return sign
class Demo(QWidget):
def __init__(self, parent=None):
super().__init__()
self.setWindowTitle('翻译软件-公众号: Python工程狮')
self.Label1 = QLabel('原文')
self.Label2 = QLabel('译文')
self.LineEdit1 = QLineEdit()
self.LineEdit2 = QLineEdit()
self.translateButton1 = QPushButton()
self.translateButton2 = QPushButton()
self.translateButton3 = QPushButton()
self.translateButton1.setText('baidu翻译')
self.translateButton2.setText('youdao翻译')
self.translateButton3.setText('Google翻译')
self.grid = QGridLayout()
self.grid.setSpacing(12)
self.grid.addWidget(self.Label1, 1, 0)
self.grid.addWidget(self.LineEdit1, 1, 1)
self.grid.addWidget(self.Label2, 2, 0)
self.grid.addWidget(self.LineEdit2, 2, 1)
self.grid.addWidget(self.translateButton1, 1, 2)
self.grid.addWidget(self.translateButton2, 2, 2)
self.grid.addWidget(self.translateButton3, 3, 2)
self.setLayout(self.grid)
self.resize(400, 150)
self.translateButton1.clicked.connect(lambda : self.translate(api='baidu'))
self.translateButton2.clicked.connect(lambda : self.translate(api='youdao'))
self.translateButton3.clicked.connect(lambda : self.translate(api='google'))
self.bd_translate = baidu()
self.yd_translate = youdao()
self.gg_translate = google()
def translate(self, api='baidu'):
word = self.LineEdit1.text()
if not word:
return
if api == 'baidu':
results = self.bd_translate.translate(word)
elif api == 'youdao':
results = self.yd_translate.translate(word)
elif api == 'google':
results = self.gg_translate.translate(word)
else:
raise RuntimeError('Api should be or or ...' )
for result in results:
self.LineEdit2.setText(result)
为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。
里面有适合小白新手的全套资料给到大家~
快来和小鱼一起成长进步吧!
① 100+多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 爬虫项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)