工程中要用到一个翻译的功能,也就是提交到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