用Python做一个翻译软件,还怕英语不好?
本文转载自公众号 | Ahab杂货铺
作者 | Ahab
前两天吃了平哥的一波狗粮,他给女朋友写了一个翻译软件,自己真真切切的感受到了程序员的浪漫。在学习requests请求的时候做过类似的Demo,给百度翻译发送一个post请求可以实现任意词组的翻译,利用周六周日将那段代码进行了进一步优化加了一个交互界面,有了今天的翻译软件。
程序介绍
先上图让大家感受一下
程序的功能很简单,可以从三个主流翻译器中选择任意的翻译器进行单词和句子的翻译,使用PyQt5模块实现人机交互,用requests模块发送请求,并将翻译结果返回给用户。
具体实现
用百度翻译来举例
任意的进行翻译来查看页面信息。
从图片中可以发现这是一个post请求,请求头的数据在的图片中也有较清楚的显示。
我们需要在添加上面的数据,其中simple_means_flag为固定量,query代表待翻译的词,根据这些信息我们写个简单的代码测试一下。
1import requests
2
3headers={"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"}
4post_data={
5'query': 'Ahab杂货铺',
6'from': 'zh',
7'to': 'en',
8'sign': '413120.175857',
9'token':'64d8ce70799b54833f56b43f9d6eb3b4'
10}
11
12post_url="https://fanyi.baidu.com/v2transapi"
13r=requests.post(post_url,data=post_data,headers=headers)
14print(r.content.decode())
运行以后输出下面的结果:
出现上面错误的原因就是sign和token这两个参数搞的鬼,先说token,token可以直接在百度翻译主页的源码里找到:
因为时间戳不同步所以直接请求百度翻译的主页获取到的token是用不了的,只能人为地把网页当前显示的token值复制下来然后赋值给代码里的token。
sign参数是根据翻译的内容而在前台生成的,如果发送的请求中,query内容和sign不匹配,则收到的响应是error。下面要做的就是破解百度翻译sign。sign是由一个js文件生成的,下图就是生成sign的js文件。
将这个代码放在格式化工具中重新排版一下,找到sign执行函数的代码,再用execjs,执行这段js代码,在计算过程中还需要gtk的值,这个值在翻译首页获取一下就可以。
1js = js.replace('\'null !== i ? i : (i = window[l] || "") || ""\'',gtk)
上边的步骤完成以后我们就可以愉快的进行翻译了。
关于如何破解sign可以参考这篇博文:https://blog.csdn.net/master_ning/article/details/81002474
图形化界面用的是pyQt5这个模块,实现起来不难。
1class 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傻瓜式操作即可完成。程序虽小五脏俱全,技术难点还是在爬虫那块的处理。希望这个小程序能给你带来一点帮助。
写在最后
代码已经上传到Github点击阅读原文即可浏览,后台回复【翻译】也可获取源码。
推荐阅读
今日问题
gSpan算法属于图挖掘算法领域,主要用于频繁子图的挖掘,相较于其他的图算法,子图挖掘算法是他们的一个前提或者基础算法。
你知道gSpan算法用到了什么编码格式吗?
打卡格式:打卡第n天,答:xxx
用Python做一个翻译软件,还怕英语不好?相关推荐
- 用python做一个翻译软件。
文章目录 前言 一.需要的库 二.分析处理 1.步骤 2.思路 三.代码的实现 1.翻译部分 2.图形界面代码 3.整合 总结 前言 对于我这种英语比较差的人来说,无论是敲代码还是看文档, 那都是离不 ...
- 用python写搜索引擎_用python做一个搜索引擎(Pylucene)的实例代码
1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...
- 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码
1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...
- Python做一个Kindle电子书下载助手,真香!
哈喽,大家好,我是菜鸟哥! 大家有没有想过把亚马逊网站上的Kindle电子书下载到自己的电脑上? 今天分享的项目可以帮大家实现这一目的.该项目用Python开发,简单.好用.开源. 下面分享下项目的使 ...
- 用Python做一个猜数游戏(入门)
用Python做一个猜数游戏(入门) 目录: 用Python做一个猜数游戏(入门) 第一阶段: 第二阶段: 前言: 各位大佬大家好,我是夕阳样桑,由于最近时间有点紧,所以先做一个小程序.感谢大家的支持 ...
- python画哆啦a梦图片_80行代码!用Python做一个哆来A梦分身
原标题:80行代码!用Python做一个哆来A梦分身 对于分身术,大家想必都或多或少的从<火影忍者>的动漫上看到过,炫酷的影分身场面,每每看到都觉得非常过瘾. 今天, 小编其实是蓝胖子的铁 ...
- python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
原标题:菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记 每个月都有各种各样的开销,不当家不知道柴米贵呀!柴米油盐酱醋茶样样都要开销,吃的穿的,各种开销,每个月都没有啥结余,小编月初是富人,月底 ...
- 用python做一个简单GUI小软件
用python做一个简单软件 前言 这是一个课设,用python做一个扫描王软件 我主要做的GUI部分,记录分享一下.也是第一次用python做小软件,python的方便果然是名不虚传 遇到问题 1. ...
- 用python做一个简单的游戏,用python写一个小游戏
大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...
最新文章
- 面试官:Maven 的这 7 个问题你思考过没有?
- 一次请求到php都经过了哪些步骤,PHP高级之一次请求处理过程或生命周期详解
- windows下安装rabbitMQ教程(实战书写)
- applicationContext.xml中的使用${}是代表什么意思?
- 动态重定位的增加的紧凑功能
- 使用volatile关键字的场景
- apicloud常用方法
- 有人很好奇我博客文章的默认展图是怎么弄的?
- 小程序的学习资料收集
- GPIO输入输出模式原理(八种工作方式附电路图详解)
- 废弃军舰回收站、废铁回炉重造
- 声网一起 KTV 功能初体验 | 掘金技术征文
- 荣耀v40怎么样 荣耀v40值得入手吗
- uiautomation 模块
- 域名的解析及域名根服务器
- win10 win 7系统 windows无法访问\\请检查名称拼写(基本上非重装系统外的终极解决方式)win7 , win10均可
- 【玩转嵌入式屏幕显示】(五)TFT-LCD屏幕显示图片
- “今日头条”发展困境与未来发展策略
- python中输出语句的怎么写_python 中简单的输出语句
- Struts2漏洞修复方案
热门文章
- 从深度学习到深度森林方法(Python)
- 英特尔携手中科院计算所建立中国首个 oneAPI 卓越中心
- 赠书 | 图像分类问题建模方案探索实践
- 30+博士、100+硕士整理的超全深度强化学习资源清单
- 剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选
- PFLD:简单、快速、超高精度人脸特征点检测算法
- 罗永浩“咬定”微信不放松
- 教育部:建设100+AI特色专业,500万AI人才缺口要补上!
- Yann LeCun等最新研究:如何对未来实例分割进行预测?
- 一些防止 Java 代码被反编译的方法