用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

用起来也是非常的简单(加上 -g 可增加谷歌翻译结果):

trans -t 你要翻译的东西

示例:

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

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

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

作者:pynickle

(0)

相关推荐

  • 教你用 Python 操控你的上网请求

    今天给大家介绍个有意思的工具,不知道你有没有听说过中间人攻击(Man-in-the-middle attack)简称 MITM,是一种"间接"的入侵攻击,这种攻击模式是通过各种技术 ...

  • 十行 Python 代码就提取了韦小宝的身份证信息

    来源:Python 技术「ID: pythonall」 记得以前有个广告词叫:"学好数理化,走遍天下都不怕",感觉应该再加一句:"带上身份证",本文我们看一下如 ...

  • 小游戏:换脸术

    最近估计大家都陆陆续续的复工了,大家经常在节后会得一个叫做节后综合征的病,具体表现为:提不起精神.上班效率低.没精神,严重的还会出现恶心.焦虑.神经衰落等等.这里给大家带来一个小游戏娱乐一下,放松上班 ...

  • 写点python代码实现下载百度空间文章(附源码)

    纯python新手写的关于下载百度空间文章python源码,代码写的不好,能用不能看.大家看看效果就行, 不要求代码的精简程度.大牛请飘过. 下载百度空间文章python源码使用方法: 在cmd中输入 ...

  • 如何用 Python 识别车牌?

    来源:Python 技术「ID: pythonall」 车牌识别在高速公路中有着广泛的应用,比如我们常见的电子收费(ETC)系统和交通违章车辆的检测,除此之外像小区或地下车库门禁也会用到,基本上凡是需 ...

  • 如何用python做一个简单的输入输出交互界面?

    大家好,我是一行 直接发代码!那不会代码的人岂不是得抓瞎 那做成网站或者微信小程序!时间成本太高了,更何况服务器又是一笔成本,后期可能还得不断维护 所以最好的方式就是直接做成界面化的GUI,然后转成e ...

  • 朗诵:怀一颗诗意的心,做一个简单的人

    百草园书店 阅读是最美的姿态,每天清晨百草园用美文.声音.故事和你说早安.一家人文书店,相伴读者二十年. 2094篇原创内容 公众号 怀一颗诗意的心,做一个简单的人 作者 | 谭旭颖 · 朗诵 | 北 ...

  • 怀一颗诗意的心,做一个简单的人

    作者 | 谭旭颖 摄影 | 菲菲 · 编辑 | 绢子 闲时读诗,读到席慕蓉的:"涉江而过,芙蓉千朵,诗也简单,心也简单."忽然心生无限柔软,莫名的喜欢.   一首简单的诗却能余味悠 ...

  • 愿你在复杂的世界中,做一个简单的人。黑格...

    愿你在复杂的世界中,做一个简单的人. 黑格尔曾说:"最伟大的真理最简单,同样,最简单的人也最难得." 大道至简,人亦如此.境界越高的人,活得越简单.         有一个著名的& ...

  • #这家店回头客超多 #佛山 芬姐做一个简单版卤水掌翼!

    #这家店回头客超多 #佛山 芬姐做一个简单版卤水掌翼!

  • 如何使用AI来做一个简单的海报?

    今天我们来做一个夜晚主题的海报,元素是有月亮和星星组成,非常的简单,下面来看看吧! 1.下面我们来做下图这样的一个小海报. 2.用矩形将画板覆盖住,然后使用吸管工具将背景颜色填充为深蓝色. 3.下面就 ...

  • 做一个简单的波浪理论图形分享

    做一个简单的波浪理论图形分享

  • 餐饮经营十类数据,拿去对照你的餐厅,做一个简单的数据分析

    餐饮经营十类数据,拿去对照你的餐厅,做一个简单的数据分析

  • 做一个简单的人

    人活着,谁都不容易,一生的经历,既有春花秋月,也有夏风冬雪.复杂的人生,简单地活,麻烦的日子,简单地过. 回首过往,太烦太累,烦恼多于快乐,大多是跟自己过不去.在艰难的日子里,学会苦中作乐,学会给自己 ...