Python爬蟲實戰(zhàn),requests+random模塊,Python制作桌面翻譯軟件

前言

今天嘗試用Python制作翻譯軟件。在這里給需要的小伙伴們提供代碼,并且給出一點小心得。

程序的功能很簡單,可以從三個主流翻譯器中選擇任意的翻譯器進(jìn)行單詞和句子的翻譯,使用PyQt5模塊實現(xiàn)人機交互,用requests模塊發(fā)送請求,并將翻譯結(jié)果返回給用戶。

翻譯

開發(fā)工具

Python版本: 3.8

相關(guān)模塊:

requests模塊

re模塊

time模塊

js2py模塊

random模塊

hashlib模塊

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

思路分析

程序的功能很簡單,可以從三個主流翻譯器中選擇任意的翻譯器進(jìn)行單詞和句子的翻譯,使用PyQt5模塊實現(xiàn)人機交互,用requests模塊發(fā)送請求,并將翻譯結(jié)果返回給用戶。

頁面數(shù)據(jù)

用baidu翻譯來舉例

任意的進(jìn)行翻譯來查看頁面信息。

頁面信息

從圖片中可以發(fā)現(xiàn)這是一個post請求,請求頭的數(shù)據(jù)在的圖片中也有較清楚的顯示。

請求頭數(shù)據(jù)

代碼實現(xiàn)

'''
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

圖形化界面代碼實現(xiàn)

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 <baidu> or <youdao> or <google>...')
        for result in results:
            self.LineEdit2.setText(result)

最后

今天的分享到這里就結(jié)束了 ,感興趣的朋友也可以去試試哈

對文章有問題的,或者有其他關(guān)于python的問題,可以在評論區(qū)留言或者私信我哦

覺得我分享的文章不錯的話,可以關(guān)注一下我,或者給文章點贊(/≧▽≦)/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容