来源 | Ahab杂货铺(ID:PythonLearningCamp)

前两天吃了平哥的一波狗粮,他给女朋友写了一个翻译软件,自己真真切切的感受到了程序员的浪漫。在学习requests请求的时候做过类似的Demo,给百度翻译发送一个post请求可以实现任意词组的翻译,利用周六周日将那段代码进行了进一步优化加了一个交互界面,有了今天的翻译软件。

程序介绍

先上图让大家感受一下

程序的功能很简单,可以从三个主流翻译器中选择任意的翻译器进行单词和句子的翻译,使用 PyQt5 模块实现人机交互,用requests模块发送请求,并将翻译结果返回给用户。

具体实现

用百度翻译来举例

任意的进行翻译来查看页面信息。

从图片中可以发现这是一个post请求,请求头的数据在的图片中也有较清楚的显示。

我们需要在添加上面的数据,其中 simple_means_flag 为固定量,query 代表待翻译的词,根据这些信息我们写个简单的代码测试一下。

1  import requests
 2
 3  headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"}
 4  post_data={
 5  'query': 'Ahab杂货铺',
 6  'from': 'zh',
 7  'to': 'en',
 8  'sign': '413120.175857',
 9  'token':'64d8ce70799b54833f56b43f9d6eb3b4'
10  }
11
12  post_url="https://fanyi.baidu.com/v2transapi"
13  r=requests.post(post_url,data=post_data,headers=headers)
14  print(r.content.decode())

运行以后输出下面的结果:

出现上面错误的原因就是sign和token这两个参数搞的鬼,先说token,token可以直接在百度翻译主页的源码里找到:

因为时间戳不同步所以直接请求百度翻译的主页获取到的 token 是用不了的,只能人为地把网页当前显示的 token 值复制下来然后赋值给代码里的 token。

sign 参数是根据翻译的内容而在前台生成的,如果发送的请求中,query 内容和 sign 不匹配,则收到的响应是 error。下面要做的就是破解百度翻译 sign。sign 是由一个 js 文件生成的,下图就是生成  sign 的 js 文件。

将这个代码放在格式化工具中重新排版一下,找到 sign 执行函数的代码,再用 execjs,执行这段 js 代码,在计算过程中还需要 gtk 的值,这个值在翻译首页获取一下就可以。

js = js.replace('\'null !== i ? i : (i = window[l] || "") || ""\'',gtk)

上边的步骤完成以后我们就可以愉快的进行翻译了。

关于如何破解 sign 可以参考这篇博文:

https://blog.csdn.net/master_ning/article/details/81002474

图形化界面用的是 pyQt5 这个模块,实现起来不难。

1  class Demo(QWidget):
 2    def __init__(self, parent=None):
 3        super().__init__()
 4        self.setWindowTitle('翻译软件-公众号: Ahab杂货铺')
 5        self.Label1 = QLabel('原文')
 6        self.Label2 = QLabel('译文')
 7        self.LineEdit1 = QLineEdit()
 8        self.LineEdit2 = QLineEdit()
 9        self.translateButton1 = QPushButton()
10        self.translateButton2 = QPushButton()
11        self.translateButton3 = QPushButton()
12        self.translateButton1.setText('百度翻译')
13        self.translateButton2.setText('有道翻译')
14        self.translateButton3.setText('谷歌翻译')
15        self.grid = QGridLayout()
16        self.grid.setSpacing(12)
17        self.grid.addWidget(self.Label1, 1, 0)
18        self.grid.addWidget(self.LineEdit1, 1, 1)
19        self.grid.addWidget(self.Label2, 2, 0)
20        self.grid.addWidget(self.LineEdit2, 2, 1)
21        self.grid.addWidget(self.translateButton1, 1, 2)
22        self.grid.addWidget(self.translateButton2, 2, 2)
23        self.grid.addWidget(self.translateButton3, 3, 2)
24        self.setLayout(self.grid)
25        self.resize(400, 150)
26        self.translateButton1.clicked.connect(lambda : self.translate(api='baidu'))
27        self.translateButton2.clicked.connect(lambda : self.translate(api='youdao'))
28        self.translateButton3.clicked.connect(lambda : self.translate(api='google'))
29        self.bd_translate = baidu()
30        self.yd_translate = youdao()
31        self.gg_translate = google()
32    def translate(self, api='baidu'):
33        word = self.LineEdit1.text()
34        if not word:
35            return
36        if api == 'baidu':
37            results = self.bd_translate.translate(word)
38        elif api == 'youdao':
39            results = self.yd_translate.translate(word)
40        elif api == 'google':
41            results = self.gg_translate.translate(word)
42        else:
43            raise RuntimeError('Api should be <baidu> or <youdao> or <google>...')
44        for result in results:
45            self.LineEdit2.setText(result)

pyQt5官方文档:

https://pypi.org/project/PyQt5/

最后就是打包发布,使用pyinstaller傻瓜式操作即可完成。程序虽小五脏俱全,技术难点还是在爬虫那块的处理。希望这个小程序能给你带来一点帮助。

(本文为Python大本营转载文章,转载请联系作者。)

福利

公众号后台回复:2018Python,获取2018Python开源项目Top100整理资料!或扫码添加小助手微信,回复:1,入群获取。

推荐阅读:

  • 为何年终奖多发一元,到手却少两千多?

  • 用Python全自动下载漂亮小姐姐的抖音视频!

  • 熬夜写代码,不如换女装入GitHub获上千Star?

  • AI找Bug,一键快速预测

  • PDF翻译神器,再也不担心读不懂英文Paper了

  • 100+Python编程练习题~

  • PDF翻译神器,再也不担心读不懂英文Paper了

  • 用“AI”给吴秀波测面相,发现······

  • Python的P图大法,你值得拥有!

  • 任正非:人工智能就是计算机和统计学

用Python做一个翻译软件相关推荐

  1. 用python做一个翻译软件。

    文章目录 前言 一.需要的库 二.分析处理 1.步骤 2.思路 三.代码的实现 1.翻译部分 2.图形界面代码 3.整合 总结 前言 对于我这种英语比较差的人来说,无论是敲代码还是看文档, 那都是离不 ...

  2. 用Python做一个翻译软件,还怕英语不好?

    本文转载自公众号 | Ahab杂货铺 作者 | Ahab 前两天吃了平哥的一波狗粮,他给女朋友写了一个翻译软件,自己真真切切的感受到了程序员的浪漫.在学习requests请求的时候做过类似的Demo, ...

  3. 用python写搜索引擎_用python做一个搜索引擎(Pylucene)的实例代码

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

  4. 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码

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

  5. python恶搞-python—做一个恶搞程序

    python-做一个恶搞程序 very easy print("You can't win this game") #你不可能赢这个游戏 n = int(input("B ...

  6. 【Python】如何用python做一个简单的输入输出交互界面?

    看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...

  7. python写520_用Python做一个520表白神器,值得收藏

    本文最后给出了打包好的软件,无需安装Python环境和各种依赖,直接下载软件,解压后,双击exe文件即可使用. 先来看一下具体的效果. 运行程序. 用Python做一个520表白神器,值得收藏 点击「 ...

  8. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

    原标题:技术图文:如何利用 Python 做一个简单的定时器类? 背景 今天在B站上看有关 Python 最火的一个教学视频 -- "零基础入门学习 Python",这也是我们 P ...

  9. python实战扫码下载_实例:用 Python 做一个扫码工具

    原标题:实例:用 Python 做一个扫码工具 来自公众号: 新建文件夹X 链接:https://blog.csdn.net/ZackSock/article/details/108610957Pyt ...

  10. Python做一个Kindle电子书下载助手,真香!

    哈喽,大家好,我是菜鸟哥! 大家有没有想过把亚马逊网站上的Kindle电子书下载到自己的电脑上? 今天分享的项目可以帮大家实现这一目的.该项目用Python开发,简单.好用.开源. 下面分享下项目的使 ...

最新文章

  1. Linux系统与性能监控
  2. elasticsearch2.3安装以及集群部署
  3. 完成AOP 顶层设计-JoinPoint
  4. JFreeChart基本的用法实例(一)
  5. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
  6. [机器学习]一个例子完美解释朴素贝叶斯分类器
  7. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”...
  8. docker mysql主从_使用docker 实现MySQL主从同步/读写分离
  9. html 两个图片并排,HTML – 两个图像并排和响应
  10. 我的世界linux开服权限不足,我的世界路由器开服怎么获得超级管理员权限
  11. FreeRTOS协程
  12. Http压力测试之ab
  13. Flutter进阶—质感设计之直接输入
  14. android仿IOS,滑动隐藏底部ScrollView
  15. java 缓存ech_java ehcache 分布式缓存配置实例 .
  16. uniapp 微信小程序生成二维码
  17. Sql 列转行字符串
  18. android标题栏跑马灯,Android跑马灯效果
  19. cocos网络通信php,Cocos2D-X服务器的网络通信编程
  20. 哥尼斯堡的“七桥问题“(并查集)

热门文章

  1. 浏览器图标及名称大全_估计真要卸载谷歌浏览器了!自带黑科技浏览器推荐(下)...
  2. ROS突然所有的工作空间都无法启动launch,但roscore可以用
  3. Docker 启动报错 Error starting daemon: SELinux is not supported with the overlay2 ...alse)
  4. 信息与通信工程专业知识点预览(复试必看)
  5. 企业微信推送suite_ticket对接
  6. button 和 input 的submit ,reset的区别
  7. 用java实现DES解密
  8. 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行
  9. 使用Neo4j分析《权力的游戏》
  10. ws协议绑定服务器域名,Websocket直接域名连接