编程自身是跟年龄无关的一件事,不管你当初是十四五岁,还是四五十岁,如果你酷爱它,并且违心继续投入其中,必定会有所播种。
本文就来自编程教室一位“小”读者的投稿(互助学习 1 群里的同学应该对作者的名字很相熟吧)。我看着他不停地产出新的代码和技术文章,不禁感叹“后生可畏”。
这是一个爬虫根底剖析和操作的开发案例,在此分享给大家。
当我在电脑上须要翻译一个单词时,我会这样做:
关上浏览器 = > 关上百度翻译 = > 输出单词 = > 失去翻译
不过有时候,当我在命令行环境下写代码的时候,懒得再切换到浏览器里期待页面的加载。
于是我就想,是否用万能的 python 制作一个 命令行下的翻译工具 呢?
说干就干!
网上搜寻了点信息,加上一顿操作,最终被我捣鼓进去了。来看下最终的成果:
在这个工具中,我用了 百度 、 有道 以及 谷歌(可选)的翻译。
开发思路
其中获取有道翻译和百度翻译的原理都差不多,这里咱们选取百度翻译来游玩一下啦:
首先关上百度翻译:http://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'[‘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: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
=========================
本案例残缺代码:https://github.com/pynickle/a… pip 装置命令:pip install quicktranslate
作者:pynickle
——
一起学,走得远!
欢送搜寻:Crossin 的编程教室