设为首页 收藏本站
查看: 1509|回复: 0

[经验分享] python网页抓取之英汉字典

[复制链接]

尚未签到

发表于 2015-4-23 05:35:09 | 显示全部楼层 |阅读模式
  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解析的。代码如下:


DSC0000.gif DSC0001.gif


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()
View Code   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59680-1-1.html 上篇帖子: Python学习系列(七)( 数据库编程) 下篇帖子: Python Web编程(六)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表