[python]Google翻译小程序


工程中要用到一个翻译的功能,也就是提交到Google翻译后,获取返回的结果。

首先摸清Google翻译的脉络:

request处理

提交翻译后,查看request和response分别是什么内容:

vcHLzOG9u7XEVVJMPC9zdHJvbmc+PC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">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处理

我们看得到的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

评论关闭