编程自己是跟年龄无关的一件事,不论你如今是十四五岁,仍是四五十岁,若是你热爱它,而且愿意持续投入其中,一定会有所收获。
本文就来自编程教室一位“小”读者的投稿(互助学习1群里的同窗应该对做者的名字很熟悉吧)。我看着他不停地产出新的代码和技术文章,不由感叹“后生可畏”。
这是一个爬虫基础分析和操做的开发案例,在此分享给你们。
当我在电脑上须要翻译一个单词时,我会这样作:前端
打开浏览器 = > 打开百度翻译 = > 输入单词 = > 获得翻译python
不过有时候,当我在命令行环境下写代码的时候,懒得再切换到浏览器里等待页面的加载。git
因而我就想,可否用万能的 python 制做一个 命令行下的翻译工具 呢?github
说干就干!编程
网上搜索了点信息,加上一顿操做,最终被我捣鼓出来了。来看下最终的效果:json
在这个工具中,我用了 百度 、 有道 以及 谷歌 (可选)的翻译。api
其中获取有道翻译和百度翻译的原理都差很少,这里咱们选取百度翻译来玩耍一下啦:浏览器
首先打开百度翻译:http://fanyi.baidu.com服务器
接下来右键点击 检查 ,选择 Network 中的 XHR (向服务器发送的数据请求)。而后咱们在输入框里输入 save 这个单词,咱们能够看到一时间这里面多了几个 sug 标签,点开一看:app
能够看到,这个 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的编程教室