日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python文本框清空_用Python制作mini翻译器

發(fā)布時(shí)間:2024/9/18 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文本框清空_用Python制作mini翻译器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
來源:http://suo.im/5ZI20R

1. 實(shí)例描述

在平時(shí)編程的過程中,會(huì)經(jīng)常在網(wǎng)上翻譯一些單詞,本文使用Python制作一款翻譯小工具,不僅可以自己用,還可以嵌入到程序當(dāng)中。運(yùn)行程序,效果如下圖所示,在文本框輸入英文或中文,單擊?翻譯?按鈕即可翻譯,并將翻譯內(nèi)容顯示在下面的文本框中。單擊?保存?按鈕將輸入內(nèi)容和翻譯內(nèi)容保存到文本文件中以便日后復(fù)習(xí)。單擊?清空?按鈕,將清除文本框中的內(nèi)容。

2. 技術(shù)要點(diǎn)

利用?requests?模塊獲取?有道詞典web?頁(yè)面的?post?信息,獲取需要的內(nèi)容,通過?tkinter?模塊生成窗口界面,使用文件讀寫方法將內(nèi)容保存到文本文件中。

2.1 有道詞典這樣的 JS 混淆加密應(yīng)該怎么破

嘿嘿嘿,本文需要說說一些爬蟲過程中需要斗智斗勇的事情了,這次咱們就來說說關(guān)于一些?JS?混淆加密的事。所謂?JS?,就是?JavaScript,一種前端的腳本語言,一般情況下每個(gè)網(wǎng)站都需要?JS?來做一些數(shù)據(jù)交互,頁(yè)面渲染等一些異步操作。當(dāng)然,對(duì)于反爬的人來說,JS?的用處還可以用來對(duì)一些數(shù)據(jù)進(jìn)行加密。

今天咱們就以有道詞典這個(gè)在線翻譯的網(wǎng)站為例,看看他們是如何加密請(qǐng)求數(shù)據(jù)的,以及筆者是如何通過?Python?模擬請(qǐng)求從而獲得關(guān)鍵數(shù)據(jù)的。

打開有道翻譯的網(wǎng)站:http://fanyi.youdao.com/


輸入中文然后點(diǎn)擊翻譯按鈕就會(huì)翻譯出來英文,比如:
接著我們打開開發(fā)者工具,按下?F12?來抓一下數(shù)據(jù),當(dāng)我們點(diǎn)擊翻譯的時(shí)候,可以看到有了一個(gè)請(qǐng)求:


點(diǎn)進(jìn)去看可以發(fā)現(xiàn),POST?請(qǐng)求的地址是:

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

我們?cè)賮砜匆幌抡?qǐng)求過去攜帶的參數(shù)是啥:

可以看到,還是需要挺多參數(shù)的,其中的?i?就是我們要翻譯的內(nèi)容,那簡(jiǎn)單啊~想要得到翻譯后的數(shù)據(jù),那么我們直接把請(qǐng)求頭和所需參數(shù)的值復(fù)制一下,然后用?requests?請(qǐng)求一波不就搞定了?運(yùn)行一波,返回的是錯(cuò)誤碼。我們?cè)冱c(diǎn)多幾次翻譯按鈕,然后就可以看到有多次請(qǐng)求。

可以發(fā)現(xiàn),每一次的請(qǐng)求中的?salt、sign、lts、bv?參數(shù)是會(huì)一直變化的。

我們回到?NetWork?,我們看到?Initiator?這一欄,可以看到它請(qǐng)求到了?fanyi.min.js:1?這個(gè) js 文件。

我們就點(diǎn)?fanyi.min.js:1?進(jìn)去看看,牛的一比,直接看不懂…還好,左下角有一個(gè)?{}?,可以點(diǎn)一下,發(fā)現(xiàn)有驚喜,直接幫我們把壓縮的?js?代碼格式化。

牛逼不,行號(hào)都給我們顯示出來了,不過到了這里,依然懵逼,我們還是不知道怎么拿到?salt、sign、lts、bv?這些參數(shù)的值…咋辦?恩,Chrome?瀏覽器的打斷點(diǎn)功能在這個(gè)時(shí)候就要派上用場(chǎng)。那么如何使用斷點(diǎn)功能呢,我們看到?Chrome?的右邊是這樣的:

看到這個(gè)?XHR/fetch BreakPoints?沒,在這里我們可以添加?url?,根據(jù)請(qǐng)求這個(gè)?url?打斷點(diǎn)。而我們要打的斷點(diǎn)就是一開始獲取到的請(qǐng)求?url?:

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

點(diǎn)擊?XHR/fetch BreakPoints?右邊的?+?號(hào),然后把鏈接復(fù)制進(jìn)去:

這時(shí)候再點(diǎn)擊翻譯按鈕,突然,你的屏幕一灰,表示好事將近,我們成功打上了斷點(diǎn),也就是說,現(xiàn)在我們可以在請(qǐng)求之前做一些騷操作。


這時(shí)候我們將右邊的?Call Stack?展開,點(diǎn)?t.translate?進(jìn)去:


這些,就是我們?cè)邳c(diǎn)擊翻譯按鈕之后,會(huì)調(diào)用到?js?里面的方法,從這里下手,來尋找參數(shù)是被如何加密的,

3. 代碼實(shí)現(xiàn)

用Python制作mini翻譯器的具體步驟如下:

1. 首先安裝?requests?模塊。使用?pip?命令安裝,命令如下:

pip?install?--user?-i?http://pypi.douban.com/simple?--trusted-host?pypi.douban.com?requests

2. 導(dǎo)入相關(guān)模塊,代碼如下。

import tkinter as tkimport requestsimport timeimport hashlibimport?random

3. 定義翻譯函數(shù),代碼如下。

def get_ts(): """ 獲取時(shí)間戳 :return: 時(shí)間 """ return str(int(time.time() * 1000))def get_bv(): """ 獲取app版本 并通過md5加密 :return: 加密后的字符串 """ navigator_appVersion = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3' \ '904.108 Safari/537.36' m = hashlib.md5() m.update(navigator_appVersion.encode('utf-8')) return m.hexdigest()def get_salt(ts): return str(ts) + str(int(random.random() * 10))def get_sign(salt): str1 = text1.get() # 定義一個(gè)變量,用來接收輸入文本框的值 str_data = 'fanyideskweb' + str1 + salt + ']BjuETDhU)zqSxf-=B#7m' m = hashlib.md5() m.update(str_data.encode('utf-8')) return m.hexdigest()def get_form_data(): str1 = text1.get() # 定義一個(gè)變量,用來接收輸入文本框的值 ts = get_ts() salt = get_salt(ts) form_data = { 'i': str1, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': str(salt), 'sign': get_sign(salt), 'ts': ts, 'bv': get_bv(), 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_CLICKBUTTION', } return form_data# 定義翻譯函數(shù)def translate(): url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'Referer': 'http://fanyi.youdao.com/', 'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=173326173.72226533; OUTFOX_SEARCH_USER_ID="-1202396372@10.108.160.18"; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcAjF-mxbKFQ_48uyLpx; __guid=204659719.1682486053682624500.1597281254731.5474; monitor_count=2; ___rl__test__cookies=1597285713766' } response = requests.post(url=url, data=get_form_data(), headers=headers) if response.status_code == 200: result = response.json() translate_result = result['translateResult'][0][0]['tgt'] text2.delete(1.0, "end") # 清空輸出文本框????????text2.insert('end',?translate_result)??#?將翻譯結(jié)果添加到輸出文本框中

4. 定義寫入文本?txt?的函數(shù),代碼如下。

# 定義寫入文本txt的函數(shù)def write(): f1 = open('translate.txt', 'a+')???f1.write(text1.get()?+?','?+?text2.get(0.0,?tk.END))

5. 定義清空文本框的函數(shù),代碼如下。

# 定義清空文本框的函數(shù)def delete(): text1.delete(0, "end") # 從第一行清除到最后一行????text2.delete(1.0,?"end")

6.?窗口界面設(shè)計(jì),代碼如下。

if __name__ == '__main__': window = tk.Tk() # 創(chuàng)建window窗口 window.wm_attributes("-topmost", 1) # 置頂 window.title("AmoXiang mini翻譯器") # 定義窗口名稱 window.resizable(width=False, height=False) # 決定框體大小是否能夠調(diào)整 text1 = tk.Entry(window, width=80, bg='whitesmoke') # 在窗體上添加一個(gè)輸入文本框,并設(shè)置尺寸和顏色 text2 = tk.Text(window, height=18, bg='lightgrey') # 在窗體上添加一個(gè)輸出文本框,并設(shè)置尺寸和顏色 text1.grid(row=0, sticky="W", padx=1) text2.grid(row=1) # 添加一個(gè)按鈕,用于觸發(fā)翻譯功能 t_button = tk.Button(window, text='翻譯', relief=tk.RAISED, width=8, height=1, font='宋體', bg='red', fg='white', command=translate) # 添加一個(gè)按鈕,用于觸發(fā)清空輸入文本框 button1 = tk.Button(window, text='保存', font='宋體', relief=tk.RAISED, width=8, height=1, command=write) # 添加一個(gè)按鈕,用于觸發(fā)清空輸出文本框 button2 = tk.Button(window, text='清空', font='宋體', relief=tk.RAISED, width=8, height=1, command=delete) # 添加背景圖片 image_file = tk.PhotoImage(file='amo.gif') label = tk.Label(window, image=image_file) # 完成界面布局,設(shè)置各個(gè)控件的位置 t_button.grid(row=0, column=1, padx=2) button1.grid(row=0, column=2, padx=2) button2.grid(row=0, column=3, padx=2) label.grid(row=1, column=1, columnspan=3)????tk.mainloop()

至此今天的案例就到此結(jié)束了,筆者在這里聲明,筆者寫文章只是為了學(xué)習(xí)交流,以及讓更多學(xué)習(xí)Python基礎(chǔ)的讀者少走一些彎路,節(jié)省時(shí)間,并不用做其他用途。編寫不易,請(qǐng)大家手留余香~


-END-

總結(jié)

以上是生活随笔為你收集整理的python文本框清空_用Python制作mini翻译器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。