本文转载自公众号 | 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做一个翻译软件,还怕英语不好?相关推荐

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

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

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

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

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

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

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

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

  5. 用Python做一个猜数游戏(入门)

    用Python做一个猜数游戏(入门) 目录: 用Python做一个猜数游戏(入门) 第一阶段: 第二阶段: 前言: 各位大佬大家好,我是夕阳样桑,由于最近时间有点紧,所以先做一个小程序.感谢大家的支持 ...

  6. python画哆啦a梦图片_80行代码!用Python做一个哆来A梦分身

    原标题:80行代码!用Python做一个哆来A梦分身 对于分身术,大家想必都或多或少的从<火影忍者>的动漫上看到过,炫酷的影分身场面,每每看到都觉得非常过瘾. 今天, 小编其实是蓝胖子的铁 ...

  7. python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记

    原标题:菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记 每个月都有各种各样的开销,不当家不知道柴米贵呀!柴米油盐酱醋茶样样都要开销,吃的穿的,各种开销,每个月都没有啥结余,小编月初是富人,月底 ...

  8. 用python做一个简单GUI小软件

    用python做一个简单软件 前言 这是一个课设,用python做一个扫描王软件 我主要做的GUI部分,记录分享一下.也是第一次用python做小软件,python的方便果然是名不虚传 遇到问题 1. ...

  9. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

最新文章

  1. 面试官:Maven 的这 7 个问题你思考过没有?
  2. 一次请求到php都经过了哪些步骤,PHP高级之一次请求处理过程或生命周期详解
  3. windows下安装rabbitMQ教程(实战书写)
  4. applicationContext.xml中的使用${}是代表什么意思?
  5. 动态重定位的增加的紧凑功能
  6. 使用volatile关键字的场景
  7. apicloud常用方法
  8. 有人很好奇我博客文章的默认展图是怎么弄的?
  9. 小程序的学习资料收集
  10. GPIO输入输出模式原理(八种工作方式附电路图详解)
  11. 废弃军舰回收站、废铁回炉重造
  12. 声网一起 KTV 功能初体验 | 掘金技术征文
  13. 荣耀v40怎么样 荣耀v40值得入手吗
  14. uiautomation 模块
  15. 域名的解析及域名根服务器
  16. win10 win 7系统 windows无法访问\\请检查名称拼写(基本上非重装系统外的终极解决方式)win7 , win10均可
  17. 【玩转嵌入式屏幕显示】(五)TFT-LCD屏幕显示图片
  18. “今日头条”发展困境与未来发展策略
  19. python中输出语句的怎么写_python 中简单的输出语句
  20. Struts2漏洞修复方案

热门文章

  1. 从深度学习到深度森林方法(Python)
  2. 英特尔携手中科院计算所建立中国首个 oneAPI 卓越中心
  3. 赠书 | 图像分类问题建模方案探索实践
  4. 30+博士、100+硕士整理的超全深度强化学习资源清单
  5. 剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选
  6. PFLD:简单、快速、超高精度人脸特征点检测算法
  7. 罗永浩“咬定”微信不放松
  8. 教育部:建设100+AI特色专业,500万AI人才缺口要补上!
  9. Yann LeCun等最新研究:如何对未来实例分割进行预测?
  10. 一些防止 Java 代码被反编译的方法