用python做個(gè)翻譯小軟件吧~

Python 2.7.13
IDE Pycharm 5.0.3

macOS 10.12.1


前言

花了一點(diǎn)時(shí)間儿普,半抄半寫半修改的寫了第一個(gè)能用的python小程序徐绑,作用是在IDE端模擬有道詞典的訪問逮京,效果如下圖所示,不足之處在于,當(dāng)輸入的中英文字符串超過一定數(shù)量祝旷,會(huì)拋出中間代碼,新手并不知道怎么處理,望知道的不吝賜教


初階:交互界面

首先在jupyter或者pycharm中進(jìn)行交互的操作怀跛,核心語句是使用raw_input捕獲系統(tǒng)輸入

效果圖

效果圖

代碼

# -*- coding: utf-8 -*-

import urllib2
import urllib  # python2.7才需要兩個(gè)urllib
import json
while True:
    content = raw_input("請(qǐng)輸入需要翻譯的內(nèi)容:")  # 系統(tǒng)捕獲輸入距贷,就是命令框會(huì)彈出提示,需要你進(jìn)行手動(dòng)輸入
    if content == 'q':  # 輸入q退出while循環(huán)
        break
    
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
    data = {}  # 構(gòu)造data吻谋,里面構(gòu)造參數(shù)傳入
    data['type'] = 'AUTO'
    data['i']=content
    data['doctype'] = 'json' 
    data['xmlVersion'] = '1.8'
    data['keyfrom'] = 'fanyi.web'
    data['ue'] = 'UTF-8'
    data['action'] = 'FY_BY_ENTER'
    data['typoResult'] = 'true'
    
    data = urllib.urlencode(data).encode('utf-8')  # 將構(gòu)造的data編碼
    req = urllib2.Request(url)  # 向?yàn)g覽器發(fā)出請(qǐng)求
    response = urllib2.urlopen(req, data)   # 帶參請(qǐng)求忠蝗,返回執(zhí)行結(jié)果
    html = response.read().decode('utf-8')
    # print(html)  # 可以取消print的注釋,查看其中效果漓拾,這邊獲取的結(jié)果是進(jìn)行解析

    target = json.loads(html)   # 以json形式載入獲取到的html字符串
    
    print "翻譯的內(nèi)容是:"+target['translateResult'][0][0]['tgt'].encode('utf-8')
    

# 請(qǐng)輸入需要翻譯的內(nèi)容:test
# 翻譯的內(nèi)容是:測(cè)試
# 請(qǐng)輸入需要翻譯的內(nèi)容:測(cè)試
# 翻譯的內(nèi)容是:test
# 請(qǐng)輸入需要翻譯的內(nèi)容:q

注意:這里的data字典中的數(shù)據(jù)根據(jù)實(shí)際網(wǎng)頁中數(shù)據(jù)為準(zhǔn)阁最,可能會(huì)不一樣,具體操作骇两,點(diǎn)擊審查元素速种。或見小甲魚54講低千。


進(jìn)階:做成gui

離實(shí)用還差那么兩步配阵,第一步是先做成GUI

可以參考以前我寫的: Python基于Tkinter的二輸入規(guī)則器(乞丐版)

界面效果

這里寫圖片描述

代碼

# -*- coding: utf-8 -*-
'''
Author:哈士奇說喵
UDate: 2016.7.21
'''
from Tkinter import *
import difflib
import urllib2
import urllib  # python2.7才需要兩個(gè)urllib
import json
  

# ----------------------主框架部分----------------------

root = Tk()
root.title('翻譯GUI&beta1')
root.geometry()
Label_root=Label(root)

#-----------------------定義規(guī)則------------------------

def translate(content):
    
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
    data = {}  # 構(gòu)造data,里面構(gòu)造參數(shù)傳入
    data['type'] = 'AUTO'
    data['i']=content
    data['doctype'] = 'json' 
    data['xmlVersion'] = '1.8'
    data['keyfrom'] = 'fanyi.web'
    data['ue'] = 'UTF-8'
    data['action'] = 'FY_BY_ENTER'
    data['typoResult'] = 'true'
    
    data = urllib.urlencode(data).encode('utf-8')  # 將構(gòu)造的data編碼
    req = urllib2.Request(url)  # 向?yàn)g覽器發(fā)出請(qǐng)求
    response = urllib2.urlopen(req, data)   # 帶參請(qǐng)求示血,返回執(zhí)行結(jié)果
    html = response.read().decode('utf-8')
    # print(html)  # 可以取消print的注釋棋傍,查看其中效果,這邊獲取的結(jié)果是進(jìn)行解析

    target = json.loads(html)   # 以json形式載入獲取到的html字符串
    
    #print u"翻譯的內(nèi)容是:"+target['translateResult'][0][0]['tgt']
    return target['translateResult'][0][0]['tgt'].encode('utf-8')
  


#還可以繼續(xù)增加規(guī)則函數(shù)矾芙,只要是兩輸入的參數(shù)都可以
#----------------------觸發(fā)函數(shù)-----------------------

def Answ():# 規(guī)則函數(shù)

    Ans.insert(END,"翻譯 %s: "%var_first.get().encode('utf-8') + translate(var_first.get().encode('utf-8')))
    
def Clea():#清空函數(shù)
    input_num_first.delete(0,END)#這里entry的delect用0
    Ans.delete(0,END)#text中的用0.0


#----------------------輸入選擇框架--------------------
frame_input = Frame(root)
Label_input=Label(frame_input, text='請(qǐng)輸入需要翻譯的內(nèi)容', font=('',15))
var_first = StringVar()
input_num_first = Entry(frame_input, textvariable=var_first)


#---------------------計(jì)算結(jié)果框架---------------------
frame_output = Frame(root)
Label_output=Label(frame_output, font=('',15))
Ans = Listbox(frame_output, height=5,width=30) #text也可以舍沙,Listbox好處在于換行


#-----------------------Button-----------------------

calc = Button(frame_output,text='翻譯', command=Answ)
cle = Button(frame_output,text='清空', command=Clea)



Label_root.pack(side=TOP)
frame_input.pack(side=TOP)
Label_input.pack(side=LEFT)

input_num_first.pack(side=LEFT)

frame_output.pack(side=TOP)
Label_output.pack(side=LEFT)
calc.pack(side=LEFT)
cle.pack(side=LEFT)
Ans.pack(side=LEFT)

#-------------------root.mainloop()------------------

root.mainloop()

高階:發(fā)布應(yīng)用

如何在小伙伴面前裝B才是我學(xué)習(xí)的動(dòng)力,哈哈哈
教程更新如下:將自己的python程序打包成.exe/.app(秀同學(xué)一臉吶)


Pay Attention

  • python3的用戶注意url包的使用和python2是有區(qū)別的剔宪,請(qǐng)根據(jù)實(shí)際需求自行百度
  • Python如果操作頻率太快或者網(wǎng)頁限制機(jī)器人對(duì)此的訪問拂铡,則需要修改head了,修改代碼后.當(dāng)然每個(gè)電腦的user都不一樣葱绒,具體去審查元素查看感帅。
req = urllib2.Request(url) # 生成對(duì)象
# 添加如下一行代碼;
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')地淀,這樣就可以偽裝成人類啦
  • 當(dāng)然也可以添加延時(shí)模塊, 即可限定訪問時(shí)間失球。
import time  #添加延時(shí)模塊
time.sleep(1)#休息1秒鐘再進(jìn)行操作

更新

  • 2016.6.14 初次撰寫
  • 2017.7.22 重新排版黔牵,增加tkinter等
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爷肝,隨后出現(xiàn)的幾起案子猾浦,更是在濱河造成了極大的恐慌陆错,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金赦,死亡現(xiàn)場(chǎng)離奇詭異音瓷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夹抗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門绳慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兔朦,你說我怎么就攤上這事偷线。” “怎么了沽甥?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵声邦,是天一觀的道長。 經(jīng)常有香客問我摆舟,道長亥曹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任恨诱,我火速辦了婚禮媳瞪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘照宝。我一直安慰自己蛇受,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布厕鹃。 她就那樣靜靜地躺著兢仰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剂碴。 梳的紋絲不亂的頭發(fā)上把将,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音忆矛,去河邊找鬼察蹲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛催训,可吹牛的內(nèi)容都是我干的洽议。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼漫拭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绞铃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫂侍,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤儿捧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后挑宠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菲盾,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年各淀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懒鉴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碎浇,死狀恐怖临谱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奴璃,我是刑警寧澤悉默,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站苟穆,受9級(jí)特大地震影響抄课,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雳旅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一跟磨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攒盈,春花似錦抵拘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至偷遗,卻和暖如春墩瞳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氏豌。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工喉酌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泵喘。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓泪电,卻偏偏與公主長得像,于是被迫代替她去往敵國和親纪铺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子相速,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,441評(píng)論 6 428
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡(jiǎn)單的交互式python版本管理工具鲜锚。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,783評(píng)論 1 61
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富突诬,涉及面非常廣苫拍。awesome-p...
    若與閱讀 18,615評(píng)論 4 418
  • 語文作業(yè): 聲母平舌音:z,c,s各寫一行,注意書寫要規(guī)范旺隙,不要寫的上大下小绒极,半圓要寫圓,兒歌和拼讀各讀三遍蔬捷!感謝配合
    瑞睿家閱讀 95評(píng)論 0 0
  • 本文總結(jié)「增長黑客」第四章激發(fā)活躍的內(nèi)容垄提,截取三個(gè)最主要點(diǎn):A|B測(cè)試(灰度測(cè)試),曠日持久的補(bǔ)貼大戰(zhàn)(紅包補(bǔ)貼)...
    geekrun閱讀 3,577評(píng)論 0 1