国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

用Python制作mini翻譯器的實現示例

瀏覽:34日期:2022-07-13 18:25:30

1. 實例描述

在平時編程的過程中,會經常在網上翻譯一些單詞,本文使用Python制作一款翻譯小工具,不僅可以自己用,還可以嵌入到程序當中。運行程序,效果如下圖所示,在文本框輸入英文或中文,單擊 翻譯 按鈕即可翻譯,并將翻譯內容顯示在下面的文本框中。單擊 保存 按鈕將輸入內容和翻譯內容保存到文本文件中以便日后復習。單擊 清空 按鈕,將清除文本框中的內容。

用Python制作mini翻譯器的實現示例

2. 技術要點

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

2.1 有道詞典這樣的 JS 混淆加密應該怎么破

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

今天咱們就以有道詞典這個在線翻譯的網站為例,看看他們是如何加密請求數據的,以及筆者是如何通過 Python 模擬請求從而獲得關鍵數據的。

點擊 此處 打開有道翻譯的網站:

用Python制作mini翻譯器的實現示例

輸入中文然后點擊翻譯按鈕就會翻譯出來英文,比如:

用Python制作mini翻譯器的實現示例

接著我們打開開發者工具,按下 F12 來抓一下數據,當我們點擊翻譯的時候,可以看到有了一個請求:

用Python制作mini翻譯器的實現示例

點進去看可以發現,POST 請求的地址是:

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

用Python制作mini翻譯器的實現示例

我們再來看一下請求過去攜帶的參數是啥:

用Python制作mini翻譯器的實現示例

可以看到,還是需要挺多參數的,其中的 i 就是我們要翻譯的內容,那簡單啊~想要得到翻譯后的數據,那么我們直接把請求頭和所需參數的值復制一下,然后用 requests 請求一波不就搞定了?運行一波,返回的是錯誤碼。

用Python制作mini翻譯器的實現示例

我們再點多幾次翻譯按鈕,然后就可以看到有多次請求。

用Python制作mini翻譯器的實現示例

可以發現,每一次的請求中的 salt、sign、lts、bv 參數是會一直變化的。

用Python制作mini翻譯器的實現示例

用Python制作mini翻譯器的實現示例

我們回到NetWork ,我們看到 Initiator 這一欄,可以看到它請求到了 fanyi.min.js:1 這個 js 文件。

用Python制作mini翻譯器的實現示例

我們就點 fanyi.min.js:1 進去看看,牛的一比,直接看不懂…還好,左下角有一個 {} ,可以點一下,發現有驚喜,直接幫我們把壓縮的 js 代碼格式化。

用Python制作mini翻譯器的實現示例

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

用Python制作mini翻譯器的實現示例

看到這個 XHR/fetch BreakPoints 沒,在這里我們可以添加 url ,根據請求這個 url 打斷點。而我們要打的斷點就是一開始獲取到的請求 url :

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

點擊 XHR/fetch BreakPoints 右邊的 + 號,然后把鏈接復制進去:

用Python制作mini翻譯器的實現示例

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

用Python制作mini翻譯器的實現示例

這時候我們將右邊的 Call Stack 展開,點 t.translate 進去:

用Python制作mini翻譯器的實現示例

這些,就是我們在點擊翻譯按鈕之后,會調用到 js 里面的方法,從這里下手,來尋找參數是被如何加密的,

用Python制作mini翻譯器的實現示例

用Python制作mini翻譯器的實現示例

3. 代碼實現

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

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

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

導入相關模塊,代碼如下。

import tkinter as tkimport requestsimport timeimport hashlibimport random

定義翻譯函數,代碼如下。

def get_ts(): ''' 獲取時間戳 :return: 時間 ''' 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() # 定義一個變量,用來接收輸入文本框的值 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() # 定義一個變量,用來接收輸入文本框的值 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# 定義翻譯函數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='[email protected]'; 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) # 將翻譯結果添加到輸出文本框中

定義寫入文本 txt 的函數,代碼如下。

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

定義清空文本框的函數,代碼如下。

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

窗口界面設計,代碼如下。

if __name__ == ’__main__’: window = tk.Tk() # 創建window窗口 window.wm_attributes('-topmost', 1) # 置頂 window.title('AmoXiang mini翻譯器') # 定義窗口名稱 window.resizable(width=False, height=False) # 決定框體大小是否能夠調整 text1 = tk.Entry(window, width=80, bg=’whitesmoke’) # 在窗體上添加一個輸入文本框,并設置尺寸和顏色 text2 = tk.Text(window, height=18, bg=’lightgrey’) # 在窗體上添加一個輸出文本框,并設置尺寸和顏色 text1.grid(row=0, sticky='W', padx=1) text2.grid(row=1) # 添加一個按鈕,用于觸發翻譯功能 t_button = tk.Button(window, text=’翻譯’, relief=tk.RAISED, width=8, height=1, font=’宋體’, bg=’red’, fg=’white’, command=translate) # 添加一個按鈕,用于觸發清空輸入文本框 button1 = tk.Button(window, text=’保存’, font=’宋體’, relief=tk.RAISED, width=8, height=1, command=write) # 添加一個按鈕,用于觸發清空輸出文本框 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) # 完成界面布局,設置各個控件的位置 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()

到此這篇關于用Python制作mini翻譯器的實現示例的文章就介紹到這了,更多相關Python mini翻譯器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 91国内精品久久久久影院优播 | 欧美性色生活片天天看99 | 亚洲天堂男 | 欧美一区二区三区精品 | 欧美视频自拍偷拍 | 性欧美欧美巨大69 | 日韩永久在线观看免费视频 | 国产成年人| 亚洲精品成人一区 | 精品欧美一区二区在线观看欧美熟 | avtt天堂网 手机资源 | 国产在线播放一区二区 | 大量真实偷拍情侣视频野战 | 亚洲另类在线视频 | 亚洲国产精品一区二区首页 | 国产欧美日韩精品第一区 | 亚洲欧美v视色一区二区 | 日韩三级中文字幕 | 午夜三级国产精品理论三级 | 亚欧在线 | 黄色美女毛片 | 精品国产一区二区三区免费看 | 欧美一级毛片大片免费播放 | 亚洲天堂网在线观看视频 | 国产图片亚洲精品一区 | 97精品国产福利一区二区三区 | 男人一进一出桶女人视频 | 亚洲爱爱天堂 | 韩日三级视频 | 9l国产精品久久久久麻豆 | 成人免费一级在线播放 | 毛片免费全部免费播放 | 九九综合九九综合 | 久久免费国产精品一区二区 | 精品厕拍| 亚洲一区二区精品视频 | 久久久久久久久久久久久久久久久久 | 日本特一级毛片免费视频 | 久久精品一区二区三区不卡牛牛 | 国产三级久久 | 美女扒开腿让男人桶 |