工程中要用到一个翻译的功能,也就是提交到Google翻译后,获取返回的结果。
首先摸清Google翻译的脉络:
提交翻译后,查看request和response分别是什么内容:
首先我们得到了提交的URL
url = httl://translate.google.cn/translate_a/t
还有如上的提交表单,分析可知:
sl = source language = en(english)
tl = target language = zh-CN(简体中文)
以及编码方式:utf-8
q = query =”this is a dog”
于是,我们得到我们的post_date
values = {'client': 't', 'sl': 'en', 'tl': 'zh-CN', 'hl': 'zh-CN', 'ie': 'UTF-8', 'oe': 'UTF-8', 'prev': 'btn',
'ssel': '0', 'tsel': '0', 'q': text}
再看头信息:
其中有浏览器一项,不知道是否必要,我们也添加一个浏览器信息:
browser = "Mozilla/5.0 (Windows NT 6.1; WOW64)"
整合上面的信息,得到request
values = {'client': 't', 'sl': 'en', 'tl': 'zh-CN', 'hl': 'zh-CN', 'ie': 'UTF-8', 'oe': 'UTF-8', 'prev': 'btn',
'ssel': '0', 'tsel': '0', 'q': text}
url = "http://translate.google.cn/translate_a/t"
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
browser = "Mozilla/5.0 (Windows NT 6.1; WOW64)"
req.add_header('User-Agent', browser)
再得到页面
response = urllib2.urlopen(req)
get_page = response.read()
我们看得到的response是什么信息:
不过这并看不出来,我们提交长句子后,可以知道,Google翻译返回的格式为:(太长不方便写出)
[[[第1句翻译,原文,读音],[第二句翻译,原文,读音],。。。],[其他信息(多义等等)]]
于是,我们通过如下的两步正则表达式匹配,可以得到文本:
text_page = re.search('\[\[.*?\]\]', get_page).group()
rex = re.compile(r'\[\".*?\",')
re.findall(rex, text_page)
最后,发现文本中还有多余的“等,进一步替换处理:
item = item.replace('[', "")
item = item.replace('",', "")
tem = item.replace('"', "")
import re
import urllib
import urllib2
def translate(text):
"""translate English to Chinese"""
alues = {'client': 't', 'sl': 'en', 'tl': 'zh-CN', 'hl': 'zh-CN', 'ie': 'UTF-8', 'oe': 'UTF-8', 'prev': 'btn',
'ssel': '0', 'tsel': '0', 'q': text}
url = "http://translate.google.cn/translate_a/t"
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
browser = "Mozilla/5.0 (Windows NT 6.1; WOW64)"
req.add_header('User-Agent', browser)
response = urllib2.urlopen(req)
get_page = response.read()
text_page = re.search('\[\[.*?\]\]', get_page).group()
text_list = []
rex = re.compile(r'\[\".*?\",')
for item in re.findall(rex, text_page):
item = item.replace('[', "")
item = item.replace('",', "")
item = item.replace('"', "")
text_list.append(item)
text_result = "".join(text_list)
return text_result