公司最近有翻译的需求(本人适用的是在第三方服务器上使用,不在本地也不在谷歌控制台),发现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. srand rand

    #include <stdlib.h> srand( (time(0)); rand()%100;

  2. springboot集成springsession利用redis来实现session共享

    转:https://www.cnblogs.com/mengmeng89012/p/5519698.html 这次带来的是spring boot + redis 实现session共享的教程. 在sp ...

  3. Hibernate-day04

    HIbernate中的HQL查询 Hibernate中的查询方式:1,使用HQL:使用hibernate提供的面向对象的查询语句;2,使用SQL:在hibernate中允许使用原生的SQL直接查询;3 ...

  4. 如何设置 jenkins 任务执行的历史记录在左侧显示的格式?

    java -jar I:\CDC\jenkins\jenkins-cli.jar -s http://$ENV:MasterHost.us.oracle.com set-build-display-n ...

  5. 2018-2019-2 20165311《网络对抗技术》Exp5 MSF基础应用

    <网络对抗技术>Exp5 MSF基础应用 实验目的 实验内容 一个主动攻击实践(ms08_067) 一个针对浏览器的攻击(ms11_050) 一个针对客户端的攻击(adobe_toolbu ...

  6. windows redis 自动启动

    start.bat D: D:\dev\redis- redis-server.exe redis.conf redis.vbs createobject( 之后,把 start.bat 放在redi ...

  7. sqlserver 表循环-游标、表变量、临时表

    SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...

  8. jmeter 之变量传递

    最近遇到个问题,一个线程组的变量怎么应用到另一个线程组,试了下,通过提取器设置的变量只能用于当前线程组,不能用于其他线程组,只能试试设置property Parameters,应该还有别的办法这只是其 ...

  9. 普通Java Web项目为什么lib包要放在WEB-INF下

    首先一个项目要编译好之后才能部署到Tomcat中运行. Tomcat运行时如何找编译好的.class文件呢,其实Tomcat下的web项目有两个预置的classpath(就是能找到.class文件的入 ...

  10. c# thread数线程的创建

    1. 1 2 3 4 5 6 Thread thread = new Thread(new ThreadStart(getpic)); thread.Start(); private void sho ...