电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

用Python制作mini翻譯器的實現(xiàn)示例

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

1. 實例描述

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

用Python制作mini翻譯器的實現(xiàn)示例

2. 技術(shù)要點

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

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

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

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

點擊 此處 打開有道翻譯的網(wǎng)站:

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

點進去看可以發(fā)現(xiàn),POST 請求的地址是:

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

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

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

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

用Python制作mini翻譯器的實現(xiàn)示例

用Python制作mini翻譯器的實現(xiàn)示例

3. 代碼實現(xiàn)

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

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

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

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

import tkinter as tkimport requestsimport timeimport hashlibimport random

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

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# 定義翻譯函數(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é)果添加到輸出文本框中

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

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

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

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

窗口界面設(shè)計,代碼如下。

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’) # 在窗體上添加一個輸入文本框,并設(shè)置尺寸和顏色 text2 = tk.Text(window, height=18, bg=’lightgrey’) # 在窗體上添加一個輸出文本框,并設(shè)置尺寸和顏色 text1.grid(row=0, sticky='W', padx=1) text2.grid(row=1) # 添加一個按鈕,用于觸發(fā)翻譯功能 t_button = tk.Button(window, text=’翻譯’, relief=tk.RAISED, width=8, height=1, font=’宋體’, bg=’red’, fg=’white’, command=translate) # 添加一個按鈕,用于觸發(fā)清空輸入文本框 button1 = tk.Button(window, text=’保存’, font=’宋體’, relief=tk.RAISED, width=8, height=1, command=write) # 添加一個按鈕,用于觸發(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è)置各個控件的位置 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()

到此這篇關(guān)于用Python制作mini翻譯器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python mini翻譯器內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 苏州柯瑞德货架-仓库自动化改造解决方案 | 加中寰球移民官网-美国移民公司,移民机构,移民中介,移民咨询,投资移民 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸| 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 家乐事净水器官网-净水器厂家「官方」 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 首页 - 张店继勇软件开发工作室| 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 科普仪器菏泽市教育教学仪器总厂 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 江西自考网-江西自学考试网| 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 |