编程本身是跟年龄无关的一件事, 不论你现在是十四五岁, 还是四五十岁, 如果你热爱它, 并且愿意持续投入其中, 必定会有所收获.
本文就来自编程教室一位 "小" 读者的投稿 (互助学习 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
- =========================
本案例完整代码: pip 安装命令: pip install quicktranslate
作者: pynickle
------
一起学, 走得远!
欢迎搜索: Crossin 的编程教室
来源: https://segmentfault.com/a/1190000023276766