首页 文章详情

实战:Python 轻松实现自动化谷歌翻译!

数据森麟 | 179 2021-12-28 13:14 0 0 0
UniSMS (合一短信)


公众号后台回复“图书“,了解更多号主新书内容

     作者:J哥

     来源:数据有道


背景

这个功能是在工作时,上级有个需求是让我将json文件中指定字段的英文翻译成中文,并且指定要使用谷歌翻译,理由是翻译的结果可能会比较准确。

过程

因为之前写过用python实现有道翻译,是在ajax中找到它的翻译接口的,所以我以为谷歌应该也差不多,于是我就打开 “开发者工具”,拼命地寻找它的翻译接口,果然让我发现了,哈哈哈哈~~

然而我发现我高兴地太早了,这TMD是个啥东西,为啥不是json啊,崩溃!!!

算了,你牛,我放弃~

于是我就面向度娘,寻求帮助,搜索关键词 “python实现谷歌翻译”,哦吼~ 结果还挺多

哈哈又草率了(欲哭无泪),随缘选中一个后,大致看了一下(好复杂555~),它们的思路大致是用PyExecJS库模拟js代码获取结果,我才不管这些,能用就行,然后一顿ctrl c/ctrl v 代码到本地后,修改一些数据,开始运行。

接下来就一顿报错,我就一顿卧槽。好的,没安装库…安装不成功,和一些莫名的其他原因。这能忍?于是我决定自己动手,丰衣足食,大不了就爬网页嘛,然后打开网页源代码,MD又草率了,并没有需要的内容,忘记结果是用js生成的,唉,怎么办?只好从最开始的那个ajax的接口下手了


内容里有很多重复的内容并且感觉毫无规则…我硬着头皮尝试用正则把内容提取出来,代码我就不贴,因为…

我花了好长好长时间,疯狂改正则表达式…啊哈!的确可以得出结果,超开心的~ 但是后面翻译的过程发现,这只适合翻译一句话,多一点都不行,它会漏掉…头又炸了!!!

我又放弃了,已经束手无策了…第二天,看到一篇文章,里面写的是 “ 字符串转为列表”的知识点,然后我灵光一现,想到了用正则和列表相结合,将内容提取出来,于是我看到了奥特曼(光)哈哈哈,这次真的可以!!!!不说了上代码

代码


import requestsimport jsonimport reimport 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 stext = '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数据

翻译结果


好了,今天的分享就到这了,奥里给~

◆ ◆ ◆  ◆ 

麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:






数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:

猜你喜欢

 卧槽!原来爬取B站弹幕这么简单

 厉害了!麟哥新书登顶京东销量排行榜!

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 你相信逛B站也能学编程吗

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter