来自程序员的福利!用Python做一款翻译软件
来源 | 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大本营转载文章,转载请联系作者。)
推荐阅读
Python一键转Java?“Google翻译”你别闹
熬夜写代码,不如换女装入GitHub获上千Star?
用Python做一个翻译软件
春节停车难?用Python找空车位
有赞公开强推 996 制,员工:已拨打市长电话
必应搜索引擎怎么了?
嫁人当嫁程序员
Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
孟岩:区块链的原则与价值观
相关文章:

海思3536:osdrv编译过程中报错及解决方法
1、安装交叉编译工具 1.1 cd toolchain/arm-hisiv300-linux/ 1.2 tar -xvf arm-hisiv300-linux.tar.bz2 1.3 修改cross.install:使用bash 1.4 sudo ./cross.instal 1.5 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了 2…

Vmware linux 无法上网
流程如下: 1)点击 VM->Settings Hardware选项卡下面 2)点击Network Adapter 设置如下图所示,首先我们在虚拟机中将网络配置设置成NAT, 3、进入Windows操作系统,然后右键点击我们的电脑,进入到管理界面 …

编程25年后,现实将我打回菜鸟程序员的起点
在从事了 25 年的编程工作后,我却发现自己没有什么具体的东西可以展示给大家。我需要克服完美主义思想和对被批评的恐惧,向大家展示真实的自己。作者 | DeChamp译者 | 苏本如责编 | 仲培艺出品 | CSDN(ID:CSDNNews)下面…

MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器
通过前面几篇,我们已经完成了内容类型,列表定义,列表实例的开发。本篇继续讲解列表中的一个重要环节——事件接收器开发。 我们的场景是:我希望之前做好的订单列表这个内容类型自动地具有某些事件特征,例如当用户在添加…

海思3536:kernel编译和mpp_single编译过程报错及解决方法
### 1、编译kernel 1.1 cd kernel/linux-3.10.y 1.2 cp arch/arm/configs/hi3536_full_defconfig.config 1.3 make ARCHarmCROSS_COMPILEarm-hisiv300-linux- menuconfig 1.4 make ARCHarmCROSS_COMPILEarm-hisiv300-linux- uImage 1.4.1 弹出选择板子型号:39&…

026——VUE中事件修饰符之使用$event与$prevent修饰符操作表单
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件修饰符之使用$event与$prevent修饰符操作表单</title><script src"vue.js"></script> </head> <body> &…

Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头、注释、变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提。1. Linux 脚本编写基础◆1.1 语法基本…

海思3536:PC客户端编译过程报错及解决方法
1、Hi3536V100R001C02SPC040版本编译出错 --------- 错误 4 error LNK2001: 无法解析的外部符号 _IveOpenFile D:\share\Hi3536V100R001C02SPC040\01.software\pc\IVE_CLIB\HiIVE_PC_V2.0.0.7\sample\ive_samples_2.0\Integ\ive_clib_2.0.lib(ive_clib.obj) 错误 5 error LNK20…

百度15篇论文被AAAI 2019收录
1月27日,第33届 AAAI(AAAI 2019)在美国夏威夷召开,其中百度共有15篇论文被收录。AAAI于1979年成立,是国际人工智能领域的顶级国际会议。这一协会如今在全球已有超过6000名的会员,汇集了全球最顶尖的人工智能…

使用 xcworkspace 管理 iOS 工程
首先创建目标工程 创建工作空间xcworkspace文件,并将创建的*.xcworkspace文件放到刚创建的目标工程同级目录下 关闭刚刚创建的目标工程,打开*.xcworkspace文件,把刚刚创建的目标工程添加到工作空间中来 如果要添加一些框架,则将目…

Windows 2008 部署服务之Windows 7 应答文件创建
——————————————————————————————Windows 2008 部署服务八步走:1、Windows 2008 部署服务之WDS概述 2、Windows 2008 部署服务之WDS安装及配置 3、Windows 2008 部署服务之添加启动映像 4、Windows 2008 部署服务之Windows XP应答文件…

DotNetCore跨平台~System.DrawingCore部署Linux需要注意的
回到目录 你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing项目里还是引用System.DrawingCore,这点不用改安装gdiplus插件,这个需要根据linux类型不同&…

iPhone曝严重漏洞,用户接听FaceTime前或被“监听”!
作者 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 近日,据 9to5Mac 等多家外媒报道,苹果手机 FaceTime 一项重大漏洞被曝光,该漏洞可以让用户通过 FaceTime 群聊功能(Group FaceTime)打电话给任…

海思3536:交叉编译Qt4.8.4
一、交叉编译qt 1、下载Qt源码包qt-everywhere-opensource-src-4.8.4.tar.gz; 2、解压Qt源码包tar -xvfzqt-everywhere-opensource-src-4.8.4.tar.gz 3、创建qmake.conf 3.1在qt-everywhere-opensource-src-4.8.4/mkspecs/qws/下创建linux-hisiv400-g++; 3.2将qt-everyw…

理解LoadRunner中的局部变量和全局变量
以下内容均选自个人作品:《精通软件性能测试与LoadRunner实战》在C语言中,变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域,按作用域范围不同,可分为局部变量和全局变量…
TI-DM8127:MCFW、ISS中对sensor的驱动和控制
1、sensor生命周期 mcfw的bios6层调用iss接口Iss_platformDeviceInit(),该接口调用sensor(以IMX185为例)初始化Iss_Imx185Init(),通过HDVPSS提供的FVID2接口FVID2_registerDriver去注册一个FVID2设备,bios6再创建一个…

小米开源FALSR算法:快速精确轻量级的超分辨率模型
作者 | 周强(我爱计算机视觉)、刘畅编辑 | Jane出品 | AI科技大本营这是来自小米最新出炉的论文,使用神经架构搜索技术自动确定超分辨率网络模型,取得了又快又好的效果,模型已开源,非常赞!摘要深…

Node.js服务器启用Gzip压缩
Gzip是什么 复制大神们的解释吧: GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或…

【bzoj1251】序列终结者(伸展树)
【bzoj1251】序列终结者(伸展树) Description 网上有许多题,就是给定一个序列,要你支持几种操作:A、B、C、D。一看另一道题,又是一个序列 要支持几种操作:D、C、B、A。尤其是我们这里的某人&…

再谈PowerPoint 2010导出幻灯片为图片
前些日子写了篇《利用VBA导出幻灯片为图片》,结果被Jackson告知,PowerPoint 2010已经有此功能了,并且PowerPoint 2007可能就已经有了。并且经最终验证,在PowerPoint 2003中同样有此功能。由于平时用PowerPoint并不多,所…

【网络编程】非阻塞connect详解
一、为什么使用非阻塞connect TCP连接的建立涉及一个在三路握手过程,阻塞的connect一直等到客户收到自己的SYN的ACK才返回,这需要至少一个RTT时间,RTT时间波动很大从几毫秒到几秒。而且在没有响应时,会等待数秒再次发送࿰…

AI,被“横扫记录”反噬?
编辑 | Jane 出品 | AI科技大本营 昨天,香侬科技发表论文《Glyce: Glyph-vectors for Chinese Character Representations》,提出基于中文字形的 NLP 模型——Glyce。香侬科技官方公开的论文解读中写道: Glyce提出了基于中文字形的语义表示&…

android 入门之一【开发环境搭建】
这里的开发环境采用Eclipseandroid 开发插件,其它的开发环境不做介绍 一.安装JDK android 开发语言是基于Java的,所以要做android的开发必须要安装JDK,并且对JDK的版本有一定的要求必须是JDK5 以上的版本,JDK5以前的版本android不…

一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?
【引言】显存不足是训练语义分割网络常常遇见的问题,而显存是GPU计算中的稀缺资源。百度深度学习框架PaddlePaddle中的显存优化,不仅可以让研究人员在相同成本的计算设备上训练更大的模型,还可以在消费级别显卡上完成训练。在本篇文章中&…

【音频】Faad源码交叉编译
1、源码下载http://www.audiocoding.com/downloads.html2、解压后,进入目录执行如下命令aclocalautoheaderautomake --add-missingautoconf./configure --hostarm-fsl-linux-gnueabi CCarm-fsl-linux-gnueabi-gcc --prefix/home/faad/installmakemake install

springboot 整合redis 实现KeySpaceNotification 键空间通知
2019独角兽企业重金招聘Python工程师标准>>> 目录结构如下: application.properties配置文件(redis的配置): spring.redis.hostlocalhost spring.redis.pool.max-idle300 spring.redis.pool.max-wait3000 spring.redis…

黄聪:穿过主机访问虚拟机中的SQL服务 FOR VMware NAT
一般来说,大家都会在主机或者虚拟机中安装SQLIIS,但假如主机的IIS想利用虚拟机中的SQL服务怎么办呢? 以我的电脑为例子,主机系统:Windows 7 7600 RTM X64,安装IIS 7.5。虚拟机系统:Windows 2003…

【数据库】mysql报错 编码码1130 和错误码1146
1、错误编码1130 问题:1130-Hose‘172.16.12.129’is not allowed to connect to this MySQL server 原因:MySQL服务器没有创建,远程客户的账户信息 解决: 1.1 登录 :mysql -uroot 1.2 切换数据库:mysql>…

一键fxxk,代码修复神器拯救你
作者 | 一一出品 | AI科技大本营(ID:rgznai100)在成为一个合格的开发者之前,大多数人一般都经历过被命令行反复“fuck”蹂躏。当然,改代码改不动了,你的内心也是“无 fuck 可说”,尤其在检查半天之后发现这…

hive2.3.2安装使用
hive的安装简单一些,使用也比较简单,基础hadoop搭建好之后,只要初始化一些目录和数据库就好了 安装需要做几件事: 1.设立一个数据源作为元数据存储的地方,默认是derby内嵌数据库,不过不允许远程连接,所以换成mysql 2.配置java路径和classpath路径 下载地址: http://mirrors.shu…