专栏首页Crossin的编程教室用Python做一个简单的翻译工具

用Python做一个简单的翻译工具

编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获。

本文就来自编程教室一位“小”读者的投稿(互助学习1群里的同学应该对作者的名字很熟悉吧

)。我看着他不停地产出新的代码和技术文章,不禁感叹“后生可畏”。

这是一个爬虫基础分析和操作的开发案例,在此分享给大家。


当我在电脑上需要翻译一个单词时,我会这样做:

打开浏览器 => 打开百度翻译 => 输入单词 => 得到翻译

不过有时候,当我在命令行环境下写代码的时候,懒得再切换到浏览器里等待页面的加载。

于是我就想,能否用万能的 python 制作一个命令行下的翻译工具呢?

说干就干!

网上搜索了点信息,加上一顿操作,最终被我捣鼓出来了。来看下最终的效果:

在这个工具中,我用了百度有道以及谷歌(可选)的翻译。

开发思路

其中获取有道翻译和百度翻译的原理都差不多,这里我们选取百度翻译来玩耍一下啦:

首先打开百度翻译:fanyi.baidu.com

接下来右键点击检查,选择 Network 中的 XHR (向服务器发送的数据请求)。然后我们在输入框里输入 save 这个单词,我们可以看到一时间这里面多了几个 sug 标签,点开一看:

可以看到,这个 sug 请求里面就有我们想要的数据。点进去,Request URL 就是我们需要请求的网址,另外在 Request Method 看到是 POST 方式,也就是提交表单:

移到最后,我们看见了提交的表单参数:

Form Data 中,我们看见表单是一个字典:{'kw': 'save'},这里 save 是我们自己输入的,也就是我们要查询的单词,因此我们使用 requests.post 来模拟这个请求:

# 网址和表单
url= 'https://fanyi.baidu.com/sug'
Form_data = {'kw': word}

# post方式请求网站
response = requests.post(url, data = Form_data,headers=headers)

我们可以试着打印出返回的东西,你会发现是以 JSON 格式返回的,因此需要引入内置库 json 来解析(还记得昨天推送的内容不?):

content = json.loads(response.text)   # 加载成字典形式

在打印出的 json 格式的文本中我们发现翻译结果在['data'][0]['v'](刚刚的图片里我们也看见了),接下来提取并返回:

result = content['data'][0]['v']   # 获取翻译结果
return result

这样就完成了提交表单了,实现百度翻译了。

这里用到的就是一些常用的爬虫分析和操作,有道翻译也基本类似,不再赘述,具体操作可参加文末给出的完整代码。

接下来我们来看看与众不同的谷歌翻译,这个玩意实在有些复杂。谷歌翻译是有 api 的,但是要钱……我不想付钱……网上有大佬给出了解决方案(这里我们简单地看一下原理):

按照近似百度翻译的方式操作,我们看到这里多出了一个请求,这里面有我们想要的翻译结果:

我们回到之前的 Request URL 看一下,发现前面的直接复制就好了,q 是我们需要翻译的词,但是这个 tk 参数却是个棘手的参数。我代码里用到的解法是网上的,仿照谷歌翻译页面上的提供的函数,用 JavaScript 去计算出了这个参数(我怀疑他就是拿的前端源码,没仔细对照)。

那么如何在 python 中执行 JavaScript 代码呢,我们可以通过 pyexecjs 这个库(注意这个库导入名是 execjs)。这个部分的源码就在 Py4Js 这个类里边了。

特别说明下,因为无法直接使用谷歌翻译,所以我把它做成了可选项,默认不会调用。

使用方法

我已经将这个项目发布到了 pypi,你可以通过 pip 命令按如下方式安装:

pip install quicktranslate
$ trans -t 你好
=========================
youdao translate result:hello
baidu translate result:[nǐ hǎo] how do you do; how are you; hello;
=========================

$ trans -t 你好 -g
=========================
youdao translate result:hello
baidu translate result:[nǐ hǎo] how do you do; how are you; hello;
google translate result:Hello there
=========================

获取本案例完整代码,请在公众号“Crossin的编程教室”中回复关键字:翻译

如果觉得本文对你有帮助,欢迎右下角点个在看支持一下~

作者:pynickle


本文分享自微信公众号 - Crossin的编程教室(crossincode),作者:pynickle

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​Python 3 新特性:类型注解

    我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。因此我们定义函数只需要这样写就可以了:

    Crossin先生
  • 为了边看美剧边学英语,我写了个字幕处理脚本

    )都有这样一个梦想:能够一边轻松愉快地看着美剧,一边自己的英语听力水平还能蹭蹭地往上涨。知乎上也有很多人分享了自己通过美剧练习听力的方法,比如说只开英文字幕或者...

    Crossin先生
  • Python零基础入门在线课程 | Crossin的编程教室出品

    “码上行动”是“Crossin的编程教室”经过5年积累后推出的一项服务,目的是为了让编程初学者,尤其是自学者,更快地找到正确的学习方向,提高编程水平。

    Crossin先生
  • 神经机器翻译来袭,传统翻译从业人员何去何从?

    有从事翻译职业的网友甚至这样形容: 作为翻译看到这个新闻的时候,我理解了18世纪纺织工人看到蒸汽机时的忧虑与恐惧。 这种看法未免有点杞人忧天。尤其是在业内专家看...

    BestSDK
  • Smartcat为翻译自动化平台募集了700万美元

    近年来,机器翻译变得越来越强大,无数的在线工具和应用程序可以作为自己学习新语言的艰难过程的不错选择。

    AiTechYun
  • 人工智能翻译之间的对决:谷歌?有道?

    由于人工智能的飞速发展,机器翻译水平正在大幅提升,并逐渐赶超人类,这已经是不争的事实。然而,同在机器翻译这个赛道里的各位“赛手”,谷歌、有道等传统翻译产品或公司...

    企鹅号小编
  • 机器翻译整体进步了十年 但各家公司却在暗自“较量”

    用户1737318
  • 翻译这件小事

    加入ThoughtWorks一年半,在前辈们的牵线搭桥之下,非常机缘巧合的参与了两本书的翻译,虽然加起来10多万字,远远未到“足以谈翻译这件事”的地步,还是希望...

    ThoughtWorks
  • 机器翻译整体进步了十年 但各家公司却在暗自“较量”

    由于人工智能的飞速发展,机器翻译水平正在大幅提升,并逐渐赶超人类,这已经是不争的事实。然而,同在机器翻译这个赛道里的各位“赛手”,谷歌、有道等传统翻译产品或公司...

    企鹅号小编
  • 干货|人人都是翻译项目的Master

    在平时的工作中,我们都会经常查阅一些英文文档来解决平时遇到的问题和拓宽视野。看到好的文章或者书籍有没有想要和小伙伴分享的冲动,那么我们一起来翻译吧~ 翻译主张 ...

    iKcamp

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动