python网页抓取之英汉字典
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()