linux的字典本人實在用起來不舒服(stardict挺不錯的,但是界面好看些,功能簡單易用就好了)
,在線翻譯又得打開龐大的瀏覽器....就打算自己寫個,但是時間有限,為了簡單,
還是用python抓取網頁來的快些。本人用的必應字典。
http://cn.bing.com/dict/?mkt=zh-CN&setlang=ZH
獲取某個單詞解釋url是:
http://cn.bing.com/dict/search?q=word&go=&qs=bs&form=CM&mkt=zh-CN&setlang=ZH
其中的紅色word即是要翻譯“word”單詞。
代碼如下dic.py:python使用的是2.7.5版本
1 #!/usr/bin/python 2 import urllib2,sys 3 from HTMLParser import HTMLParser 4 from htmlentitydefs import name2codepoint 5 6 class MyHTMLParser(HTMLParser): #解析html 7 def __init__(self): 8 HTMLParser.__init__(self) 9 self.t=False 10 self.trans=[] 11 self.pr=False 12 def handle_starttag(self, tag, attrs): 13 if tag=='div': 14 for attr in attrs: 15 if attr==('class','hd_prUS') or \ 16 attr==('class','hd_pr'): 17 self.pr=True 18 if tag=='span': 19 for attr in attrs: 20 if attr==('class','def'): 21 self.t=True 22 def handle_data(self, data): 23 if self.t: 24 self.trans.append(data) 25 self.t=False 26 if self.pr: 27 print data 28 self.pr=False 29 def getTrans(self): 30 return self.trans 31 class trans: 32 _URL='http://cn.bing.com/dict/search' 33 def __init__(self): 34 self.url=trans._URL+"?q=%s&go=&qs=bs&form=CM&mkt=zh-CN&setlang=ZH" 35 self.html=None 36 def getHtml(self,word): #獲取單詞翻譯的網頁 37 self.url=self.url %word 38 print word," :" 39 req = urllib2.Request(self.url) 40 fd=urllib2.urlopen(req) 41 self.html=fd.read() 42 self.html=unicode(self.html,'utf-8') 43 fd.close() 44 45 def parseHtml(self): #解析調用 46 parser = MyHTMLParser() 47 self.html=parser.unescape(self.html) 48 parser.feed(self.html) 49 s=parser.getTrans() 50 t=1 51 for i in s: 52 print t,'. ',i 53 t+=1 54 55 if __name__=='__main__': 56 t=trans() 57 t.getHtml(sys.argv[1]) 58 t.parseHtml() 59
終端操作:
05:07@:~/workspace$ ./dic.py action action : 美 [ˈækʃ(ə)n] 英 [ˈækʃ(ə)n] 1 . 行動;行為;訴訟;戰斗 2 . 務必做 3 . 動作;操作;作用
終端用起來也不甚方便,有時間把代碼搬進圖形程序中.....pyQt還是kivy等圖形庫,
用過pyQt,抽時間看看吧。
本人的注釋是寫博客后來加上去的,可以直接刪了,或者添加# -*- coding: utf-8 -*-
對於html的解析另一個不錯的模塊庫是BeautifulSoup,解析相當給力。但是需要自己安裝
這個庫。和上面代碼功能一樣,但是使用BeautifulSoup解析的。代碼如下:

1 #!/usr/bin/python 2 import urllib2,sys 3 from BeautifulSoup import BeautifulSoup 4 class MyHTMLParser: 5 def __init__(self): 6 self.trans=[] 7 self.us=None 8 self.uk=None 9 self.define=True 10 def feed(self,html): 11 parsed_html=BeautifulSoup(html) 12 self.us=parsed_html.find('div',{'class':'hd_prUS'}).text 13 self.uk=parsed_html.find('div',{'class':'hd_pr'}).text 14 self.us=self.us.replace(' ',' ') 15 self.uk=self.uk.replace(' ',' ') 16 print self.us,',',self.uk 17 self.define=parsed_html.findAll('span',{'class':'def'}) 18 for t in self.define: 19 self.trans.append(t.text) 20 def getTrans(self): 21 return self.trans 22 class trans: 23 _URL='http://cn.bing.com/dict/search' 24 def __init__(self): 25 self.url=trans._URL+"?q=%s&go=&qs=bs&form=CM&mkt=zh-CN&setlang=ZH" 26 self.html=None 27 def getHtml(self,word): 28 self.url=self.url %word 29 print word," :" 30 req = urllib2.Request(self.url) 31 fd=urllib2.urlopen(req) 32 self.html=fd.read() 33 fd.close() 34 35 def parseHtml(self): 36 parser = MyHTMLParser() 37 parser.feed(self.html) 38 s=parser.getTrans() 39 t=1 40 for i in s: 41 print t,'. ',i 42 t+=1 43 44 if __name__=='__main__': 45 t=trans() 46 t.getHtml(sys.argv[1]) 47 t.parseHtml()