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

[经验分享] python实现的翻译脚本

[复制链接]

尚未签到

发表于 2015-4-21 13:10:03 | 显示全部楼层 |阅读模式
  今天突然有一个想法,就是想自己写一个翻译脚本。可惜Google提供的API是供网络应用的。刚好在《dive into python》里面这本书里面看到如何从HTML文档中提取出来自己想要的内容,那这样的话,可不可以模拟浏览器来发送想翻译的句子,然后再接收返回结果后的HTML源码,最后从中提取出翻译的结果呢?  其实是行的,因为利用python可以模拟浏览器的行为,向Google翻译的主页发送想要翻译的句子。下面是具体的代码:

Python语言: Codee#7671
1 import urllib,urllib2
2
3 values={'hl':'zh-CN','ie':'utf8','text':text,'langpair':"en|zh-CN"}
4 url='http://translate.google.cn/translate_t'
5 data = urllib.urlencode(values)
6 req = urllib2.Request(url, data)
7 req.add_header('User-Agent', "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)")
8 response = urllib2.urlopen(req)  上面最关键的是text这个变量,值为想翻译的句子。后面的langpair的值是语言对,这里是英文翻译成简体中文,可以自由改动。下面就要实现一个类来取出我们想要的翻译结果,这个类要从SGMLParser派生出来,SGMLParser是在sgmllib.py中包含的。

Python语言: Codee#7673
01 from sgmllib import SGMLParser
02
03 class URLLister(SGMLParser):
04     def reset(self):
05         SGMLParser.reset(self)
06         self.result = []
07         self.open = False
08     def start_div(self, attrs):
09         id = [v for k, v in attrs if k=='id']
10         if 'result_box' in id:
11             self.open = True
12     def handle_data(self, text):
13         if self.open:
14             self.result.append(text)
15             self.open = False  当调用feed方法时,就会寻找开始标记为div的片段,当找到时,它会调用一个自身内部的方法,其实最终也就是调用到start_div跟handle_data这两个方法来找出我们想要的翻译结果,具体的就不说了。下面是完整的代码:

Python语言: Codee#7674
  01 import urllib,urllib2
02 from sgmllib import SGMLParser
03
04 class URLLister(SGMLParser):
05     def reset(self):
06         SGMLParser.reset(self)
07         self.result = []
08         self.open = False
09     def start_div(self, attrs):
10         id = [v for k, v in attrs if k=='id']
11         if 'result_box' in id:
12             self.open = True
13     def handle_data(self, text):
14         if self.open:
15             self.result.append(text)
16             self.open = False
17
18 while True:
19     text = raw_input("请输入要翻译的英文(退出输入q):")
20     if text=='q':
21         break;
22     values={'hl':'zh-CN','ie':'utf8','text':text,'langpair':"en|zh-CN"}
23     url='http://translate.google.cn/translate_t'
24     data = urllib.urlencode(values)
25     req = urllib2.Request(url, data)
26     req.add_header('User-Agent', "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)")
27     response = urllib2.urlopen(req)
28     parser = URLLister()
29     parser.feed(response.read())
30     parser.close()
31     print "翻译结果:"
32     for i in parser.result:
33         i = unicode(i,'utf-8').encode('gbk');
34         print i
DSC0000.jpg

运维网声明 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-59266-1-1.html 上篇帖子: python简单模拟:把树存储在数据表中 下篇帖子: 用python实现的百度新歌榜、热歌榜下载器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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