Python实现谷歌翻译爬虫——Pyside2写GUI

之前写过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可以独立使用。

(可以玩玩,学习交流)

拜了个拜

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值