公司最近有翻译的需求(本人适用的是在第三方服务器上使用,不在本地也不在谷歌控制台),发现Google的Translate API只能翻墙调,但是国内也有翻译需求,经多方查找汇集众家之长,找到一个感觉最好用的,稍稍改进了一下,

一。国内爬虫版(主要参考https://blog.csdn.net/andeyeluguo/article/details/78581590):

很多博客有提到tk值要js处理,不多说,直接上干货

首先,是要pip处理js的模块

pip install PyExecJS

创建HandleJs.py

 import execjs  

 class Py4Js():  

     def __init__(self):
self.ctx = execjs.compile("""
function TL(a) {
var k = "";
var b = ;
var b1 = ; var jd = ".";
var $b = "+-a^+6";
var Zb = "+-3^+b+-f"; for (var e = [], f = , g = ; g < a.length; g++) {
var m = a.charCodeAt(g);
> m ? e[f++] = m : ( > m ? e[f++] = m >> | : ( == (m & ) && g + < a.length && == (a.charCodeAt(g + ) & ) ? (m = + ((m & ) << ) + (a.charCodeAt(++g) & ),
e[f++] = m >> | ,
e[f++] = m >> & | ) : e[f++] = m >> | ,
e[f++] = m >> & | ),
e[f++] = m & | )
}
a = b;
for (f = ; f < e.length; f++) a += e[f],
a = RL(a, $b);
a = RL(a, Zb);
a ^= b1 || ;
> a && (a = (a & ) + );
a %= 1E6;
return a.toString() + jd + (a ^ b)
}; function RL(a, b) {
var t = "a";
var Yb = "+";
for (var c = ; c < b.length - ; c += ) {
var d = b.charAt(c + ),
d = d >= t ? d.charCodeAt() - : Number(d),
d = b.charAt(c + ) == Yb ? a >>> d: a << d;
a = b.charAt(c) == Yb ? a + d & : a ^ d
}
return a
}
""") def getTk(self,text):
return self.ctx.call("TL",text)

创建main.py

 import json
import urllib.request
import urllib.parse
from HandleJs import Py4Js def open_url(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(req)
data = response.read().decode('utf-8')
return data def buildUrl(content, tk, tl):
baseUrl = 'http://translate.google.cn/translate_a/single'
baseUrl += '?client=t&'
baseUrl += 'sl=auto&'
baseUrl += 'tl=' + str(tl) + '&'
baseUrl += 'hl=zh-CN&'
baseUrl += 'dt=at&'
baseUrl += 'dt=bd&'
baseUrl += 'dt=ex&'
baseUrl += 'dt=ld&'
baseUrl += 'dt=md&'
baseUrl += 'dt=qca&'
baseUrl += 'dt=rw&'
baseUrl += 'dt=rm&'
baseUrl += 'dt=ss&'
baseUrl += 'dt=t&'
baseUrl += 'ie=UTF-8&'
baseUrl += 'oe=UTF-8&'
baseUrl += 'clearbtn=1&'
baseUrl += 'otf=1&'
baseUrl += 'pc=1&'
baseUrl += 'srcrom=0&'
baseUrl += 'ssel=0&'
baseUrl += 'tsel=0&'
baseUrl += 'kc=2&'
baseUrl += 'tk=' + str(tk) + '&'
baseUrl += 'q=' + content
return baseUrl def translate(content, tk, tl):
content = urllib.parse.quote(content)
url = buildUrl(content, tk, tl) result = open_url(url)
res_json = json.loads(result)
trans_text = res_json[0][0][0]
# sl是要翻译的源语种
sl = res_json[8][0][0]
print(trans_text)
print(sl) def main():
js = Py4Js()
#content是要翻译的内容
#tl是要翻译的目标语种,值参照ISO 639-1标准,如果翻译成中文"zh/zh-CN简体中文"
content = "test"
tl = "ja"
tk = js.getTk(content)
translate(content, tk, tl) if __name__ == "__main__":
main()

二。谷歌API调用

谷歌控制台创建项目,绑定信用卡(翻译API收费),绑定项目和账号,启用Translation API,创建service account(这部分可以参考 https://blog.csdn.net/nicolelili1/article/details/76973097 的一-五),然后

首先还是pip Google translation SDK

pip install --upgrade google-cloud-translate

翻译的代码(指定credentials)

 from google.cloud import translate
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('Key.json')
translate_client = translate.Client(credentials=credentials)
translation = translate_client.translate(
text,
target_language=target_lang)
print(translation)

ok啦

三。谷歌API调用

转了一大圈,发现自己走了很多弯路,此方法最为便捷,但是也有安全隐患(有明文的Key)

代码

 import urllib.request
import urllib.parse
key = "**********" #你的API Key
content = urllib.parse.quote(text)
url = "https://translation.googleapis.com/language/translate/v2?key=%s&target=%s&q=%s" % (key, target_lang, content)
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf-8'))
res = data['data']['translations'][0]
print(res)

附AWS的翻译(不过目前只有3个region有这个功能):

 import boto3
client = boto3.client('translate', region_name='us-east-1')
result = client.translate_text(
Text=text,
SourceLanguageCode=source_lang if source_lang else 'auto',
TargetLanguageCode=target_lang
)

参考链接:

https://blog.csdn.net/andeyeluguo/article/details/78581590

https://blog.csdn.net/nicolelili1/article/details/76973097

https://cloud.google.com/translate/docs/quickstart-client-libraries

https://googleapis.github.io/google-cloud-python/latest/translate/usage.html

http://iamct.iteye.com/blog/952558

Python3调谷歌翻译的更多相关文章

  1. Python3 动手自己写谷歌翻译

    本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题. 没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk. 文中tk的实现是复用的网上大神的代码生成tk. 好了,不说了直接看 ...

  2. python爬虫调用谷歌翻译接口

    2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...

  3. C#借助谷歌翻译实现翻译小工具(一)基本功能实现

    软件效果: 实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser"肢解"谷歌翻译网站的HtmlElement元素, ...

  4. 免费利用网页版谷歌翻译实现任意语言转换php版

    本文源发布地址: http://ourgarden.cn/2013/07/20/%E5%85%8D%E8%B4%B9%E5%88%A9%E7%94%A8%E7%BD%91%E9%A1%B5%E7%89 ...

  5. google谷歌翻译插件-网页一键翻译

    上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用 ...

  6. C#实现谷歌翻译API

    由于谷歌翻译官方API是付费版本,本着免费和开源的精神,分享一下用C#实现谷歌翻译API的代码.这个代码非常简单,主要分两块:通过WebRequest的方式请求内容:获取Get方式的请求参数(难点在于 ...

  7. Asp.Net Core 实现谷歌翻译ApI 免费版

    由于谷歌翻译官方API是付费版本,本着免费和开源的精神.分享一下用 Net Core 实现谷歌翻译API的代码. 项目引用的Nuget 包: ChakraCore.NET Newtonsoft.Jso ...

  8. c# 破解谷歌翻译

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. firefox浏览器 插件--【维基百科+谷歌翻译】高级应用之 带图翻译

    [维基词典+谷歌翻译]插件地址: https://addons.mozilla.org/zh-CN/firefox/addon/google-dictionary-and-google-t/?src= ...

随机推荐

  1. day13_DOM

    一,document可以获得HTML页面全部内容, 1.①document.getElementById:获取全部id标签,②document.getElementById("i1" ...

  2. 动态规划-数位DPwindy

    https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/L #include<bits/stdc++.h> ...

  3. 版本管理_svn_检出_更新_提交_本机 MAC 地址_冲突

    版本管理 git svn [subversion] 实现集中式的版本控制工具软件 来源于最初的工程图纸. 需求: 备份还原 协同修改 权限控制 弊端:集中式(管理方便,但是如果中心服务器瘫痪,整个开发 ...

  4. [LeetCode] Binary Trees With Factors 带因子的二叉树

    Given an array of unique integers, each integer is strictly greater than 1. We make a binary tree us ...

  5. 切换controller 后面的最好不要用id参数,不然会根据路由规则改变

    //切换actionResult             return RedirectToAction("Edit", "EngineeringCase",  ...

  6. 安卓动态分析工具【Android】3D布局分析工具

    https://blog.csdn.net/fancylovejava/article/details/45787729 https://blog.csdn.net/dunqiangjiaodemog ...

  7. n&m位运算

    在C/C++语言里,&代表取地址或者“位与”运算 1.取变量的地址:&变量名,这将获得该变量的地址,例:int a = 1, &p = a. 2.进行位与运算,格式是:变量1& ...

  8. 在区块链侧链上进行Dapp技术开发

    我在白皮书里提到过,asch使用的是不同于以太坊和比特币的侧链架构,dapp是运行在侧链上的,每套侧链对应一个dapp. 侧链的独立性 侧链架构的好处是代码和数据独立,不增加主链的负担,避免数据过度膨 ...

  9. SpringBoot注解大全 转

    2019年3月17日22:30:10 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@Enab ...

  10. 刷榜中ASO优化中下载量与评论之间的对应比

    刷榜中ASO优化中下载量与评论之间是怎么样对应,我们都知道,在ASO优化的过程中,ASO优化师在做下载量后的二至三天,都会顺带着做一下评论.这时候问题就来了,下载量与评论的比例关系应该如何确定呢?最近 ...