实战:Python 轻松实现自动化谷歌翻译!
共 3103字,需浏览 7分钟
·
2021-12-18 10:19
背景
这个功能是在工作时,上级有个需求是让我将json文件中指定字段的英文翻译成中文,并且指定要使用谷歌翻译,理由是翻译的结果可能会比较准确。
过程
因为之前写过用python实现有道翻译,是在ajax中找到它的翻译接口的,所以我以为谷歌应该也差不多,于是我就打开 “开发者工具”,拼命地寻找它的翻译接口,果然让我发现了,哈哈哈哈~~
然而我发现我高兴地太早了,这TMD是个啥东西,为啥不是json啊,崩溃!!!
算了,你牛,我放弃~
于是我就面向度娘,寻求帮助,搜索关键词 “python实现谷歌翻译”,哦吼~ 结果还挺多
哈哈又草率了(欲哭无泪),随缘选中一个后,大致看了一下(好复杂555~),它们的思路大致是用PyExecJS库模拟js代码获取结果,我才不管这些,能用就行,然后一顿ctrl c/ctrl v 代码到本地后,修改一些数据,开始运行。
接下来就一顿报错,我就一顿卧槽。好的,没安装库…安装不成功,和一些莫名的其他原因。这能忍?于是我决定自己动手,丰衣足食,大不了就爬网页嘛,然后打开网页源代码,MD又草率了,并没有需要的内容,忘记结果是用js生成的,唉,怎么办?只好从最开始的那个ajax的接口下手了
内容里有很多重复的内容并且感觉毫无规则…我硬着头皮尝试用正则把内容提取出来,代码我就不贴,因为…
我花了好长好长时间,疯狂改正则表达式…啊哈!的确可以得出结果,超开心的~ 但是后面翻译的过程发现,这只适合翻译一句话,多一点都不行,它会漏掉…头又炸了!!!
我又放弃了,已经束手无策了…第二天,看到一篇文章,里面写的是 “ 字符串转为列表”的知识点,然后我灵光一现,想到了用正则和列表相结合,将内容提取出来,于是我看到了奥特曼(光)哈哈哈,这次真的可以!!!!不说了上代码
代码
import requests
import json
import re
import time
def googleTranslate(text):
"""
用谷歌翻译内容,返回翻译结果
params: text 翻译的内容
return: str s 翻译结果
"""
url = 'https://translate.google.cn/_/TranslateWebserverUi/data/batchexecute?rpcids=MkEWBc&f.sid=-2984828793698248690&bl=boq_translate-webserver_20201221.17_p0&hl=zh-CN&soc-app=1&soc-platform=1&soc-device=1&_reqid=5445720&rt=c'
headers = {
'origin': 'https://translate.google.cn',
'referer': 'https://translate.google.cn/',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
'x-client-data': 'CIW2yQEIpbbJAQjEtskBCKmdygEIrMfKAQj2x8oBCPfHygEItMvKAQihz8oBCNzVygEIi5nLAQjBnMsB',
'Decoded':'message ClientVariations {repeated int32 variation_id = [3300101, 3300133, 3300164, 3313321, 3318700, 3318774, 3318775, 3319220, 3319713, 3320540, 3329163, 3329601];}',
'x-same-domain': '1'
} # 以防万一,我全加上了,可能有些不写也可以
data = {
'f.req': f'[[["MkEWBc","[[\\"{text}\\",\\"auto\\",\\"zh-CN\\",true],[null]]",null,"generic"]]]'
} # text则是你要翻译的内容
res = requests.post(url, headers=headers, data=data).text # 获取返回的结果
pattern = '\)\]\}\'\s*\d{3,4}\s*\[(.*)\s*' # 提取需要的部分
part1 = re.findall(pattern, res)
part1_list = json.loads(part1[0]) # 字符串转列表
if part1_list[2] is None: # 如果返回的结果中没有需要的数据,则返回输入的内容
print(text)
return text
content1 = part1_list[2].replace('\n', '')
part2_list = json.loads(content1)[1][0][0][5:][0] # 过滤结果中重复的部分
s = ''
for i in part2_list: # 遍历结果中的每一句话,并进行拼接
s += i[0]
print(s)
return s
text = 'friend. Let us look back on 2020 and look forward to 2021.'
print(text)
googleTranslate(text)
效果
效果如何?
如何翻译成其他语言?
当然,这仅仅是实现了任何语言转为中文,要转为别的语言,你可以通过执行js,获取所有语言对应的英文字母,以字典的形式存储,最后保存为json文件
然后执行程序时,动态地输入翻译后的语言,去json文件中获取对应的英文代表,然后替换data中的"zh-CN"即可。比如我想翻译成日语,我就将“zh-CN”替换成 “ja”,这样,翻译出来的结果就是日语了
修改data数据
翻译结果
好了,今天的分享就到这了,奥里给~
各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)
推荐阅读
推荐阅读