亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:37日期: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 編程
相關文章:
主站蜘蛛池模板: 成年美女黄的视频网站 | 亚洲色图 p| 污片在线观看免费 | 日韩高清在线不卡 | 亚洲午夜日韩高清一区 | 日本老妇人乱视频 | 99国产精品高清一区二区二区 | 亚州毛片| 看色网站| 日韩欧美一二区 | 国产夫妇精品自在线 | 国产主播在线看 | 成人午夜爽爽爽免费视频 | 久草在线视频免费资源观看 | 国产精品美女在线 | 好硬好湿好爽再深一点h视频 | 欧美高清一级毛片免费视 | 久久精品免观看国产成人 | 狼人久草 | 日本美女黄色片 | 欧美精品国产综合久久 | 麻豆国产精品入口免费观看 | 国产高清不卡一区二区 | 日本伊人精品一区二区三区 | 国产影片中文字幕 | 黄色一级视频片 | 9丨精品国产高清自在线看 9久9久女女免费精品视频在线观看 | 伊人久久大香线蕉精品哪里 | 91热这里只有精品 | 搜索毛片 | 欧美亚洲在线视频 | 亚洲国产成人久久一区久久 | 一级全黄男女免费大片 | 91视频免费网址 | 日日噜噜夜夜狠狠视频无 | 日韩美女一区 | 日本人与黑人做爰视频网站 | 国产精品久久久久影视不卡 | 9久久免费国产精品特黄 | 国产精品成人va | 在线观看大片的网站 |