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

 
 

b4bc5758d9daebc68c6574f902e11748.gif

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

     作者:J哥

     来源:数据有道


背景

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

过程

因为之前写过用python实现有道翻译,是在ajax中找到它的翻译接口的,所以我以为谷歌应该也差不多,于是我就打开 “开发者工具”,拼命地寻找它的翻译接口,果然让我发现了,哈哈哈哈~~
74d21f8285d93e03939683cd5f7272c7.png
然而我发现我高兴地太早了,这TMD是个啥东西,为啥不是json啊,崩溃!!!

算了,你牛,我放弃~

于是我就面向度娘,寻求帮助,搜索关键词 “python实现谷歌翻译”,哦吼~ 结果还挺多
d08c750f1d95bf380c2fbeee7f37dafc.png
哈哈又草率了(欲哭无泪),随缘选中一个后,大致看了一下(好复杂555~),它们的思路大致是用PyExecJS库模拟js代码获取结果,我才不管这些,能用就行,然后一顿ctrl c/ctrl v 代码到本地后,修改一些数据,开始运行。

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

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

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

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

代码

fe80586096c9118c27e2de8e7485365f.png
cbdcacb6197ae0b399d2f4f03e75cf99.png

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)

效果

效果如何?
47ce2c7fc4de21289db0fda16d47fe05.png

如何翻译成其他语言?

当然,这仅仅是实现了任何语言转为中文,要转为别的语言,你可以通过执行js,获取所有语言对应的英文字母,以字典的形式存储,最后保存为json文件
bcbba7805fc10a1e907610254a1a9688.png
然后执行程序时,动态地输入翻译后的语言,去json文件中获取对应的英文代表,然后替换data中的"zh-CN"即可。比如我想翻译成日语,我就将“zh-CN”替换成 “ja”,这样,翻译出来的结果就是日语了

修改data数据

b363b05a4d8b3b5cf7811d65b09cd529.png

翻译结果

3bb4fd3d63a8ce00be23bbef5b12a48b.png
好了,今天的分享就到这了,奥里给~

◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
 
 
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢

● 卧槽!原来爬取B站弹幕这么简单
● 厉害了!麟哥新书登顶京东销量排行榜!
● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!
● 你相信逛B站也能学编程吗
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值