之前写过MATLAB的一个谷歌翻译的爬虫,但是要搞成EXE独立运行就很麻烦,这个时候python就比较有用了。
效果是这样的:
就是选择左边被翻译的语言,右边选要翻译的语言,点翻译,就出现在右边。
先看看怎么实现:两个文件一个是ui文件,一个是py代码,在同一个文件夹里面(这里我在提一下另一个思路就是ui文件可以转成python,然后这种简单代码就可以放在一个文件夹里面了),
这个我分享到百度云里面(这个里面有个文件夹是生成的EXE可以独立运行):文件下载点这里 提取码是:19y6
制作过程是:
1在安装的pyside2的包里有一个设计GUI的一个Qtdesigner,用这个做了了一个界面,一个按钮,两个下拉框放可能翻译的语言种类,一个输入文本,一个输出文本。
2写py代码:先导入ui文件,然后再写爬虫的一些代码就完事了:下面是代码:共享的文件里面也有,安装的库主要就是pyside2和requests。
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 9 13:48:30 2020
@author: wenjun
"""
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
import sys
import requests
import execjs
# from HandleJs import Py4Js
class Py4Js():
def __init__(self):
self.ctx = execjs.compile("""
function TL(a) {
var k = "";
var b = 406644;
var b1 = 3293161072;
var jd = ".";
var $b = "+-a^+6";
var Zb = "+-3^+b+-f";
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var m = a.charCodeAt(g);
128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023),
e[f++] = m >> 18 | 240,
e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224,
e[f++] = m >> 6 & 63 | 128),
e[f++] = m & 63 | 128)
}
a = b;
for (f = 0; f < e.length; f++) a += e[f],
a = RL(a, $b);
a = RL(a, Zb);
a ^= b1 || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return a.toString() + jd + (a ^ b)
};
function RL(a, b) {
var t = "a";
var Yb = "+";
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2),
d = d >= t ? d.charCodeAt(0) - 87 : Number(d),
d = b.charAt(c + 1) == Yb ? a >>> d: a << d;
a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
}
return a
}
""")
def getTk(self,text):
return self.ctx.call("TL",text)
class Trans:
def __init__(self):
self.ui = QUiLoader().load('GTB.ui')
self.ui.comboBox.addItems(['zh-CN','en','ja','fr','de'])
self.ui.comboBox_2.addItems(['en','zh-CN','ja','fr','de'])
self.ui.pushButton.clicked.connect(self.Trans)
def translate(self, tk, content, sl, tl):
param = {'tk': tk, 'q': content}
result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl="""+sl\
+"""&tl="""+tl+"""&hl="""+sl+""""&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
&dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param)
return result
def Trans(self):
info = self.ui.plainTextEdit.toPlainText()
Source = self.ui.comboBox.currentText()
Totrans = self.ui.comboBox_2.currentText()
js = Py4Js()
tk = js.getTk(info)
result = self.translate(tk,info,Source,Totrans);
# count_NUM = len(result.json()[0])
# print(result.json()[0][1][0])
count_NUM = 1
for si in info:
if si in ['。', '?', '!','.','?','!']:
count_NUM = count_NUM+1;
respon = ' '
for i in range(count_NUM):
tem = result.json()[0][i][0]
if tem != None:
respon = respon+tem
all_respon = '';
for rez in result.json():
all_respon = all_respon+str(rez)
print(all_respon)
self.ui.textBrowser.setText(respon)
app = QApplication.instance()
if app == None:
app = QApplication(sys.argv)
fram = Trans()
fram.ui.show()
app.exec_()
如果是新手可能看我写的代码比较亲切。哈哈哈哈哈(需要解释的是,比如汉译英:sl=zh-CN,tl=en)
这个类是网上的大神们的,class Py4Js():这里也是python的爬虫比MATLAB麻烦的地方。MATLAB不需要这个参数。
3. 最后发布用的pyinstaller,就是打包成EXE可以独立使用。
(可以玩玩,学习交流)
拜了个拜