主要技術(shù):爬蟲(chóng)和tkinter模塊的運(yùn)用
思路說(shuō)明:設(shè)計(jì)一個(gè)圖形界面,第一行輸入中文,點(diǎn)擊 “翻譯” 按鈕,此時(shí)做的就是將輸入的內(nèi)容,通過(guò)有道網(wǎng)頁(yè)翻譯,發(fā)出POST請(qǐng)求,得到回應(yīng)后,將翻譯結(jié)果顯示在第二行,現(xiàn)象是 “結(jié)果” 行輸出翻譯結(jié)果;點(diǎn)擊 “退出” 按鈕就退出
先說(shuō)布局-------tkinter的運(yùn)用
最終實(shí)現(xiàn)圖片如下

image.png
直接上代碼
from tkinter import *
master = Tk()
#設(shè)置標(biāo)題
master.title('翻譯軟件')
#小x,非大X,設(shè)置大小
master.geometry('400x100+450+278')
#設(shè)置標(biāo)簽,排版(第一行第一列,即row=0,column=0)
Label(master,text="輸入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="結(jié)果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#設(shè)置文本框 對(duì)應(yīng)上邊lable的排版
Entry(master,font=('GB2312',18)).grid(row=0,column=1)
Entry(master,font=('GB2312',18)).grid(row=1,column=1)
#設(shè)置按鈕 按鈕增加響應(yīng)事件commnad=函數(shù)名,sticky設(shè)置對(duì)齊(參數(shù) 東起南北)
Button(master,text="翻譯",width=10,font=('GB2312',18)).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)
master.mainloop()
產(chǎn)生如下界面 點(diǎn)擊退出,就會(huì)推出

image.png
爬蟲(chóng)部分
import json
import requests
def fanyi():
#url不是http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule,把_o去掉
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data ={
'i': '你好',
'doctype': 'json'
}
#此處是POST請(qǐng)求
r = requests.post(url,data=data)
ret = r.content.decode()
result = json.loads(ret)
print(result)
fanyi()
輸出結(jié)果,可以看出返回結(jié)果在JSON里面

image.png
說(shuō)下思路,打開(kāi)有道翻譯網(wǎng)頁(yè)版,F(xiàn)12,查看Network,翻譯 "你好"
輸出 hello,在這里可以獲取url和請(qǐng)求方式POST,往下找到Form Date就是需要POST的數(shù)據(jù)結(jié)構(gòu),只需2個(gè),就可以了

image.png

image.png
整合兩部分
首先,輸出框里面是個(gè)變量,因?yàn)檩斎雰?nèi)容不定
res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
entry2.grid(row=1,column=1)
其次設(shè)置翻譯按鈕事件,關(guān)聯(lián)到自己寫(xiě)的fanyi函數(shù)
Button(master,text="翻譯",width=10,font=('GB2312',18),command=fanyi).grid(row=2,column=0,sticky=W)
最后就是翻譯函數(shù),首先獲取輸入內(nèi)容,然后在將爬取到的結(jié)果給變量
res(上面定義的)
def fanyi():
#獲取輸入內(nèi)容,并去除空格
content = entry1.get().strip()
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
#組合需要POST的data數(shù)據(jù),需要翻譯內(nèi)容為content變量
data ={
'i': content,
'doctype': 'json'
}
#發(fā)送請(qǐng)求
r = requests.post(url,data=data)
ret = r.content.decode()
result = json.loads(ret)
print(result)
#輸出結(jié)果為:{'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 0, 'translateResult': [[{'src': '你好', 'tgt': 'hello'}]]}
#設(shè)置結(jié)果框res變量為需要的結(jié)果,不熟悉dict操作的,百度下
#只需要hello
res.set(result['translateResult'][0][0]['tgt'])
完整代碼
import json
from tkinter import *
import requests
def fanyi():
content = entry1.get().strip()
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data ={
'i': content,
'doctype': 'json'
}
r = requests.post(url,data=data)
ret = r.content.decode()
result = json.loads(ret)
#print(result)
res.set(result['translateResult'][0][0]['tgt'])
#print(content)
master = Tk()
master.title('翻譯軟件')
#小x,非大X
master.geometry('400x100+450+278')
#設(shè)置標(biāo)簽
Label(master,text="輸入任容:",font=('GB2312',18),fg='blue').grid(row=0,column=0)
Label(master,text="結(jié)果:",font=('GB2312',18),fg='blue').grid(row=1,column=0)
#設(shè)置文本框
entry1 = Entry(master,font=('GB2312',18))
entry1.grid(row=0,column=1)
res = StringVar()
entry2 = Entry(master,font=('GB2312',18),textvariable=res)
entry2.grid(row=1,column=1)
#設(shè)置按鈕
Button(master,text="翻譯",width=10,font=('GB2312',18),command=fanyi).grid(row=2,column=0,sticky=W)
Button(master,text="退出",width=10,font=('GB2312',18),command=master.quit).grid(row=2,column=1,sticky=E)
master.mainloop()
運(yùn)行結(jié)果:

image.png

image.png
感謝閱讀~