整合營銷服務商

          電腦端+手機端+微信端=數(shù)據同步管理

          免費咨詢熱線:

          Python每日一練-用Python制作mini翻譯器

          • 1. 實例描述
          • 2. 技術要點
            • 2.1 有道詞典這樣的 JS 混淆加密應該怎么破
          • 3. 代碼實現(xiàn)


          1. 實例描述

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

          2. 技術要點

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          3. 代碼實現(xiàn)

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

          1. 首先安裝 requests 模塊。使用 pip 命令安裝,命令如下:pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com requests 1
          2. 導入相關模塊,代碼如下。import tkinter as tk import requests import time import hashlib import random 12345
          3. 定義翻譯函數(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) # 將翻譯結果添加到輸出文本框中 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
          4. 定義寫入文本 txt 的函數(shù),代碼如下。# 定義寫入文本txt的函數(shù) def write(): f1 = open('translate.txt', 'a+') f1.write(text1.get() + ',' + text2.get(0.0, tk.END)) 1234
          5. 定義清空文本框的函數(shù),代碼如下。# 定義清空文本框的函數(shù) def delete(): text1.delete(0, "end") # 從第一行清除到最后一行 text2.delete(1.0, "end") 1234
          6. 窗口界面設計,代碼如下。if __name__ == '__main__': window = tk.Tk() # 創(chuàng)建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) # 添加一個按鈕,用于觸發(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) # 完成界面布局,設置各個控件的位置 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() 12345678910111213141516171819202122232425

          至此今天的案例就到此結束了,筆者在這里聲明,筆者寫文章只是為了學習交流,以及讓更多學習Python基礎的讀者少走一些彎路,節(jié)省時間。

          最后,小編想說:我是一名python開發(fā)工程師,

          整理了一套最新的python系統(tǒng)學習教程,

          想要這些資料的可以關注私信小編“01”即可(免費分享哦)希望能對你有所幫助

          記得智趣狗去年體驗的戴爾新游匣7466嗎(點擊查看《戴爾新游匣7466游戲本體驗》)?如今游匣系列已經全面進化到了七代酷睿和NVIDIA GTX1050系列獨顯時代,整體性能較前輩們又有了進一步的提升。

          沒錯,今天智趣狗為大家?guī)淼捏w驗產品,就是游匣系列的最新款:Master 7000-15,擁有15.6英寸大視野,同時還融入了跑車元素外觀設計,并選擇i7-7700HQ與GTX1050 Ti搭配的游戲悍將。

          這次智趣狗拿到的戴爾游匣Master 15為超跑版,此外該機器還有赤紅版和湛黑版兩種配色,小伙伴們可以根據自己的喜好加以選擇。三種版本的差異只是A面的顏色和裝飾,超跑版在赤紅版的基礎上添加了三道條紋,看起來更酷更時尚。

          今天的體驗,就先從游匣Master 15超跑版的外觀賞析說起吧。

          這次流行超跑風

          如果你的流量足夠,推薦播放這個實物圖賞的視頻,很好看哦。

          手機用戶可以點擊 https://v.qq.com/x/page/s03927j34vj.html 查看視頻

          游匣Master 15依舊采用了金屬材質的頂蓋和邊框,看起來就像是將整個機身“包裹”了起來,并在金屬表面進行了類膚材質的紅色噴涂工藝,不僅保證了機身整體的強度,也提升了手感,還能起到防滑效果。

          超跑風格的A面裝飾,喜歡嗎?

          游匣Master 15紅色的金屬側邊還采用了弧度處理,而不是游戲本上常用的那種棱角分明的剛毅風格,拎起筆記本時的手感也是杠杠的。

          機身前端的紅黑色柵格里隱藏著揚聲器。

          機身后面的散熱框體是新游匣系列的點睛之筆,傾斜的切角讓本來有點圓潤感覺的機身也有了幾分剛毅之感,兩個“水”字型的欄柵后面就是被噴上紅漆的散熱鰭片,看起來非常個性。

          游匣Master 15采用了游戲本中常用的紅色鍵盤背光,但它卻在WASD四個按鍵的邊框上加入了一圈鏤空處理,當紅色背光亮起時,其他按鍵只有鍵帽上的標識可以透過紅色炫光,而WASD的感覺則是被紅光包裹,看起來更為醒目。

          游匣Master 15的接口平均分布在機身兩側,對一款15.6英寸大屏游戲本來說,它的接口數(shù)量和種類不算特別豐富。

          拆機只需一顆螺絲

          為了方便玩家升級維護,戴爾為游匣Master 15準備了簡易的拆機設計:只需擰下一顆螺絲,就能拆下底部的擋板。

          游匣Master 15重約2.65kg,在15.6英寸游戲本中算不上輕盈的,也許很多童鞋會覺得有些遺憾。但小編想說的是,游匣Master 15重一點自有道理,那就是它在內部添加了防滾架結構,雖然增加了重量,但對機身堅韌性所起到的貢獻卻不容忽視。要知道,這年頭絕大多數(shù)游戲本的主板、上面的芯片電容等都是直接裸露的,僅靠機身邊框承擔抗沖擊的作用。

          有了防滾架后,戴爾游匣Master 15的抗沖擊性和耐擠壓性,在同類產品中可以算是鮮有敵手了。值得一提的是,游匣Master 15對內部的每一顆螺絲,每一根排線都有注釋說明,便于我們后期的深度拆機,細節(jié)設計值得稱道。

          這款機器標配128GB SSD和500GB HDD。可惜,游匣Master 15標配的SSD為SATA通道,讀寫性能相對一般。

          戴爾游匣Master 15采用了雙風扇雙熱管的散熱模塊,CPU和GPU雙烤機測試時,處理器最高溫度為95度,顯卡溫度為75度。請放心,CPU溫度雖高但卻不會出現(xiàn)降頻問題,此時鍵盤中間偏右上的位置略有熱感,整體表現(xiàn)還是很不錯的。

          GTX1050Ti是動力之源

          戴爾游匣Master 15在配置上的最大亮點,就是選擇了GTX1050 Ti獨顯與七代酷睿處理器搭配。關于GTX1050 Ti咱們需要再重點說一下,因為它算是NVIDIA新一代顯卡中的神U(GPU)。

          簡單來說,筆記本用的GTX1050 Ti移動版和桌面顯卡版的GTX1050規(guī)格一致,只是調低了功耗墻閾值,無法長時間滿血運行在最高頻率上而已。

          GTX1050 Ti移動版的性能,可略微領先NVIDIA上一代移動顯卡中的GTX970M,在1080P+中高畫質下可以流暢運行時下所有的大型3D游戲。當然,如果你非外接顯示器挑戰(zhàn)2K甚至4K分辨率,那就免談了。

          最關鍵的是,GTX1050 Ti的TDP功耗僅有50W,和NVIDIA上一代定位中端的GTX960M持平,對散熱模塊的要求不算很高。

          就我們體驗的這款戴爾游匣Master 15來說,i7-7700HQ、GTX1050 Ti、雙硬盤的組合幾乎不存在性能上的瓶頸。可惜,該產品雖然性能給力,但它依舊沒能用上IPS屏幕,垂直可視角度偏低是它的最大缺陷。

          高顏值的實力派

          總的來說,戴爾游匣Master 15是一款主打顏值的實力派選手,它足以滿足絕大多數(shù)用戶在方寸之間體驗大型3D游戲的實力,個性的外觀和簡易的拆機升級設計也是它的特色之筆。如果你覺得這款Master 15價格較高,還可考慮搭載i5-7300HQ的低配版;如果你對游戲性能要求不算特別苛刻,還可考慮配備GTX1050顯卡的Master 15,價格更實惠。

          更多實物圖片欣賞:

           在日常生活中,會有容易把合頁與滑撐弄混,實質上合頁與滑撐的區(qū)別是相當大。今天小編就幫大家好好區(qū)分一下合頁與滑撐,不要再搞混了。

            合頁與滑撐雖然都是門窗五金的重要組成部分,但它們在功能和使用上卻存在顯著的差異。了解這些差異,對于正確選擇和安裝門窗配件至關重要。

          別再弄混了,合頁與滑撐的區(qū)別_雄進五金

            合頁,也被稱為鉸鏈,主要用于固定和連接門框和門扇,使門扇能夠順暢地打開和關閉。它通常由兩片或多片金屬片組成,通過轉軸或連桿結構實現(xiàn)轉動功能。合頁的種類繁多,如普通合頁、彈簧合頁、軸承合頁等,每種都有其特定的用途和優(yōu)勢。

            相比之下,滑撐則主要用于支撐和固定門窗,防止其變形和搖晃,多用于平開窗或上懸窗。它通常安裝在門窗的框體上,通過滑軌和滑塊的配合,實現(xiàn)門窗的開啟和關閉,其材質多為304不銹鋼。此外,滑撐的結構相對復雜,包括滑軌、滑塊、托臂等多個部件,這些部件共同協(xié)作,確保門窗的穩(wěn)定性和安全性。

            通過上述了解,合頁和滑撐在門窗五金配件中各自扮演著不同的角色。因此,在選擇和安裝門窗配件時,需要根據實際需求,仔細區(qū)分合頁和滑撐的功能和用途,以確保門窗的質量和使用效果。

            企業(yè)名稱:廣東雄進金屬制品有限公司

            來源于:“ 雄進五金 ”:https://www.gd-xiongjin.com/article/detail/post-488.html


          主站蜘蛛池模板: 91在线精品亚洲一区二区| 日本精品高清一区二区| 日本不卡一区二区三区| 亚洲AV无码一区二区三区久久精品 | 风流老熟女一区二区三区| 亚洲伦理一区二区| 国产91精品一区| 亚洲a∨无码一区二区| 丝袜人妻一区二区三区网站| 国产精品无码一区二区三区在| 亚拍精品一区二区三区| 亚洲毛片αv无线播放一区| 高清一区二区三区| 精品日韩一区二区三区视频| 自拍日韩亚洲一区在线| 亚洲综合一区二区精品导航 | 国产乱码精品一区二区三区 | 亚洲国产成人久久一区WWW| 日韩一区二区三区射精| 无码人妻一区二区三区一| 国产在线一区二区三区| 99久久精品费精品国产一区二区| 免费在线观看一区| 国产精品亚洲一区二区三区久久| 亚州AV综合色区无码一区| 亚洲熟妇无码一区二区三区| 国产乱人伦精品一区二区| 日韩精品无码免费一区二区三区| 亚洲午夜福利AV一区二区无码 | 伊人色综合一区二区三区| 在线精品亚洲一区二区三区| 国产精品被窝福利一区| av无码一区二区三区| 亚洲AⅤ视频一区二区三区| 国产高清在线精品一区二区三区| 亚洲成av人片一区二区三区| 亚洲AV成人精品日韩一区18p| 亚洲高清成人一区二区三区| 国产一区二区精品尤物| 内射女校花一区二区三区| 久久国产一区二区|