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