您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何在python中調(diào)用金山詞霸的翻譯功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
打開之后,界面是這樣的,還是比較干凈的。
按F12,打開調(diào)試工具,選擇Network,找到XHR
這里就是查看網(wǎng)絡(luò)傳輸?shù)膬?nèi)容。XHR就是不刷新頁面的網(wǎng)絡(luò)傳輸,就是常說的ajax(阿賈克斯,像是希臘神話里的名字……)。
然后我們?cè)诜g窗口寫點(diǎn)兒內(nèi)容,然后點(diǎn)翻譯
看,左邊的頁面出現(xiàn)了翻譯結(jié)果,右邊調(diào)試窗口出現(xiàn)了兩條數(shù)據(jù)傳輸。
兩條?那我們選哪條呢?點(diǎn)開看看……
哦,天哪~兩條都是一樣的,那我們隨便選一條就可以了。
點(diǎn)一下,看后面的內(nèi)容
好了,首先看到的是Request URL。嗯……就是我們要的URL了。
先記下來……
(你是用復(fù)制、粘貼,還是鍵盤上手打?難道是抄在本子上?)
下面的Post也要記住,這是請(qǐng)求類型,別用成get了。
再往下,
上面那部分是不是很熟悉?對(duì)了,就是URL鏈接里的東西。不管他,URL里有了就好了。
下面的部分,就是要提交的數(shù)據(jù)了。
把這部分轉(zhuǎn)成字典格式:
data = { 'from':'zh' 'to':'en' 'q':'風(fēng)' }
from和to這就好理解了,就是從中文到英文嘛。好,咱們不管他是中是英,都給成“auto”,讓他自己去猜去……
q就是我們查的詞語,那我們就用變量q表示吧,這樣改后的字典就是:
data = { 'from':'auto' 'to':'auto' 'q':q }
提交的數(shù)據(jù)有了,那我們把請(qǐng)求頭建立起來吧
再讓我們回到調(diào)試工具里去看下
headers就是請(qǐng)求頭部,那里面這么多東西,我們要用什么呢?
當(dāng)然**User-Agent:**不能少了
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER' }
好了,我們需要的東西都齊了,那就開始吧:
首先是引入文件,
import requests
我們?cè)俚秸{(diào)試工具里看下返回值,看下獲取的內(nèi)容是什么格式的。一般返回值有json的,也有html的。
這里把返回的結(jié)果給你了,這就是json的數(shù)據(jù)格式。
我們用q來獲取輸入的文本
q = input('請(qǐng)輸入要翻譯的內(nèi)容:')
整理后就是這樣了:
import requests q = input('請(qǐng)輸入要翻譯的內(nèi)容:') headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' } url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba&sign=c1b23d3ff9163427' data = { 'from':'auto', 'to':'auto', 'q':q } res = requests.post(url=url,headers=headers,data=data).json() print(res)
好了,運(yùn)行一遍試下
我們輸入要翻譯的內(nèi)容,
不錯(cuò),結(jié)果返回了,是json格式的數(shù)據(jù),里面有我們需要的結(jié)果。
再換個(gè)詞試下……
這是什么情況?為什么錯(cuò)了?
好吧,我們?cè)跒g覽器里試下
點(diǎn)開看一下……
發(fā)現(xiàn)了嗎?sign不一樣……
前一個(gè)是什么?
sign=c1b23d3ff9163427'
這個(gè)是
sign=4b733a5ea3f4dd5a
sign是動(dòng)態(tài)生成的,怎么辦?找生成方法!
我們看這里……
這是運(yùn)行的代碼的位置,我們點(diǎn)進(jìn)去……
上面老長(zhǎng)一行了,怎么辦?
看左下角的大括號(hào)了嗎?點(diǎn)下就會(huì)有驚喜!
好棒!已經(jīng)排列整齊了……
下面就是在這里查找sign的位置了,Ctrl+F,開始搜索
23個(gè)結(jié)果,一個(gè)個(gè)看過去……找找哪個(gè)比較像加密的……
看,這里是對(duì)URL進(jìn)行拼接的。上面就是sign的加密方式
sign后面拼接的是個(gè)r,r就是上面的一行算出來的,
r = c()("6key_cibaifanyicjbysdlove1".concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))).toString().substring(0, 16);
你看,這個(gè)r就是用一系列字符串拼接起來的,都有什么呢?
1、"6key_cibaifanyicjbysdlove1" 2、t.q.replace(/(^\s*)|(\s*$)/g, "")
第一個(gè)簡(jiǎn)單,就是一串固定的字符串
第二個(gè)呢?t.q是什么鬼?我們來找一下……
好,我們?cè)谶@一行打個(gè)斷點(diǎn),就是在前面的行號(hào)上點(diǎn)一下。
看見藍(lán)色的標(biāo)簽了吧,這就是個(gè)斷點(diǎn)。在運(yùn)行的時(shí)候,運(yùn)行到這里就會(huì)停止,然后把當(dāng)前狀態(tài)給你報(bào)出來。好了,斷點(diǎn)有了,
咱們讓點(diǎn)下翻譯,讓他運(yùn)行下看看
運(yùn)行到斷點(diǎn)時(shí),停止了,并將當(dāng)前的參數(shù)顯示了出來。把鼠標(biāo)放在q上……
所得寺內(nèi)!原來就是我們要查的詞哦……
然后就把他們拼在一起……
"6key_cibaifanyicjbysdlove1"+"云"
可是c()又是什么鬼?好吧,我們看下加密后的結(jié)果是什么
這個(gè)字符串是不是很眼熟?很像md5不是嗎?
好的,那我們找一個(gè)md5加密工具試下,把加密前的字符串拼接起來
"6key_cibaifanyicjbysdlove1云"
然后我們放到md5加密工具里,看結(jié)果
看這里……
是不是這個(gè)?32位加密后的前16位!
我們?cè)衮?yàn)證一下,換一個(gè)詞查下,我們查下“雨”
我把字符串拼接好
"6key_cibaifanyicjbysdlove1雨"
放到md5工具里看下
是不是一樣的?好了,我們知道sign的加密規(guī)則了,那我們自己就把這個(gè)sign加密。
要用到md5,我們就要引用新的文件了
import hashlib
至于md5的用法,可以看下:
import hashlib hash = hashlib.md5()#md5對(duì)象,md5不能反解,但是加密是固定的,就是關(guān)系是一一對(duì)應(yīng),所以有缺陷,可以被對(duì)撞出來 hash.update(bytes('admin',encoding='utf-8'))#要對(duì)哪個(gè)字符串進(jìn)行加密,就放這里 print(hash.hexdigest())#拿到加密字符串 # hash3=hashlib.sha384()#不同算法,hashlib很多加密算法 # hash3.update(bytes('admin',encoding='utf-8')) # print(hash.hexdigest()) hash4 = hashlib.md5(bytes('abd',encoding='utf-8')) ''' 如果沒有參數(shù),所有md5遵守一個(gè)規(guī)則,生成同一個(gè)對(duì)應(yīng)關(guān)系,如果加了參數(shù), 就是在原先加密的基礎(chǔ)上再加密一層,這樣的話參數(shù)只有自己知道,防止被撞庫, 因?yàn)閯e人永遠(yuǎn)拿不到這個(gè)參數(shù) ''' hash4.update(bytes('admin',encoding='utf-8')) print(hash4.hexdigest())
然后我們把sign的加密寫一下
sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16]
再把sign拼接到url上
sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16] url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba' url = url+'&sign='+sign
然后我們運(yùn)行下看看
一切OK,沒問題!
最后我們從返回的json數(shù)據(jù)里提取出我們要的那部分
rt= res['content']['out'] print('翻譯完成:'+rt)
全部代碼就是
import requests import hashlib q = input('請(qǐng)輸入要翻譯的內(nèi)容:') headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' } url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba' sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16] url = url+'&sign='+sign data = { 'from':'auto', 'to':'auto', 'q':q } res = requests.post(url=url,headers=headers,data=data).json() rt= res['content']['out'] print('翻譯完成:'+rt)
運(yùn)行看下:
面的相關(guān)文章希望大家以后多多支持億速云!
看完上述內(nèi)容,你們對(duì)如何在python中調(diào)用金山詞霸的翻譯功能有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。