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

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

本文就来自编程教室一位“小”读者的投稿(互助学习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,headersheaders=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  
=========================  

用Python做一个简单的翻译工具的更多相关文章

  1. [python]做一个简单爬虫

    为什么选择python,它强大的库可以让你专注在爬虫这一件事上而不是更底层的更繁杂的事 爬虫说简单很简单,说麻烦也很麻烦,完全取决于你的需求是什么以及你爬的网站所决定的,遇到的第一个简单的例子是pas ...

  2. 用Python做一个简单的小游戏

    学习总是枯燥的,对于Python小白的我来讲,更是乏味的.为了提高学习的兴趣,今天我就来写一个小程序练练手. 数字猜谜游戏相信大家都不陌生,A给出最小值最大值,B写一个该范围内的数,A猜测写下的是多少 ...

  3. python 做一个简单的登录接口

    # -*- conding :utf-8 -*-# File Name: homewoe# Create Date: 2019/11/20 / 9:15# Change Activity: 2019/ ...

  4. python做一个简易图片下载工具

    代码有点乱,先这样 # -*- coding:utf-8 -*- #__author__ :kusy #__content__:文件说明 #__date__:2018/11/01 11:01 impo ...

  5. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  6. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  7. Jmeter初步使用二--使用jmeter做一个简单的性能测试

    经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...

  8. 用python做一个搜索引擎(Pylucene)

    什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...

  9. HTTP lab01 做一个简单的测试用 web页面

      做一个简单的测试用 web页面     1.安装httpd服务   yum install httpd   安装完httpd服务后,系统就自动生成了/var/www/html目录     创建一个 ...

随机推荐

  1. bzoj2561最小生成树

    bzoj2561最小生成树 题意: 给定一个连通无向图,假设现在加入一条边权为L的边(u,v),求需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树上. 题解: 最 ...

  2. sql中in和exists的原理及使用场景。

    在我们的工作中可能会遇到这样的情形: 我们需要查询a表里面的数据,但是要以b表作为约束. 举个例子,比如我们需要查询订单表中的数据,但是要以用户表为约束,也就是查询出来的订单的user_id要在用户表 ...

  3. 前端框架-jQuery自学笔记

    What's jQuery jq就是一个封装了很多方法的js库. Why use jQuery 原生js的缺点 不能添加多个入口函数(window.onload),如果添加多个,后面会把前面的覆盖 a ...

  4. Cyber Security - Palo Alto Security Policies(2)

    Task 3 The SOC(Security Operation Center) monitoring team dashboard reported more 1,000 requests to ...

  5. Ethical Hacking - Web Penetration Testing(10)

    SQL INJECTION SQLMAP Tool designed to exploit SQL injections. Works with many DB types, MySQL, MSSQL ...

  6. 【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位

    对象实例化内存布局与访问定位 从各自具体的内存分配上来讲 new 的对象放在堆中 对象所属的类型信息是放在方法区的 方法当中的局部变量放在栈空间 这 new 的对象怎么把三块粘合到一起 就是这章的内容 ...

  7. @Autowired @Qualifier

    spring2.1中允许用户通过@Autowired注解对Bean的属性变量.属性Setter方法以及构造函数进行标注,配合AutowiredAnnotationBeanProcessor完成Bean ...

  8. 解决用vscode开发arduino时Serial未定义

    在工作目录编辑c_cpp_properties.json文件 添加defines字段 { "configurations": [ { "name": " ...

  9. Spring的SchedulingConfigurer实现定时任务

    前提:在做业务平台的时候我们经常会遇到,某些跟时间打交道的需要修改状态,比如说在时间区间之前,属于未生效状态,区间之内属于有效期,区间之后,属于过期,或者需要每天 每周 每月,甚至是年为单位的做一些固 ...

  10. hcharts生成图表

    借助hcharts插件,可以很方便地在模板页面中生成图表.类似插件还有echarts. 补充...