zhouandtao 发表于 2015-4-23 05:35:09

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)
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)
47         t.parseHtml()
View Code   
页: [1]
查看完整版本: python网页抓取之英汉字典