首页 文章详情

项目实战:教你用爬虫+Tkinter制作一个翻译软件

Python绿色通道 | 402 2021-06-25 21:27 0 0 0
UniSMS (合一短信)

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包


今天咱们用爬虫和Tkinter界面来做一个翻译软件。

后台发送【0216】即可获得全部代码


运行效果

软件实现功能:当我们输入英文或中文时,程序即可打印出来对应的译文,如图:


实现方法

1. 爬虫部分

实现一键翻译最简单的方式就是爬虫,我们只需将要翻译的内容传入,然后将翻译的结果爬取下来呈现给用户即可。在此,我们选择的网站是有道翻译。

下图这个界面,你在左边输入文字,那么浏览器会把你输入的信息传输给服务器。再在右侧返回对应翻译结果。这就是一个典型的Post操作。

由于之前我们的爬取都是采用的Get方式来获取数据的,并没有用过Post方式,所以这里简单给大家说一下怎么用python发送Post请求:

发送post请求分为表单类(x-www-form-urlencoded)和json(application/json)格式,data参数支持字典格式和字符串格式,建议使用字典格式,在使用json.dumps()方法把data转换为合法的json格式字符串,或者将data参数赋值给post方法的json参数,data以字符串格式传输需要注意的事项:

1. 必须是json格式字符串,必须用双引号,k-v之家必须有逗号,布尔值必须是小写的true/false

2. 不能有中文,直接传字符串不会自动编码

介绍完毕,我们继续。

我们还是按F12打开开发者模式,我们发现我们传入的数据并没有在原网页中出现,所以我们判断这是一个使用异步刷新的网站,所以该URL,应该去XHR中寻找(这里有不懂XHR知识的可以看我的这篇文章,一文教会你,Ajax数据爬取,本文不在详细介绍)。果然,我们在XHR中发现了我们传入的数据,如图:


一切准备就绪了,我们可以开始书写代码了,爬虫部分代码如下:

url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#使用post需要一个链接
data={'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
'typoResult': 'false'}
#将需要post的内容,以字典的形式记录在data内。
r = requests.post(url, data)
#post需要输入两个参数,一个是刚才的链接,一个是data,返回的是一个Response对象
answer=json.loads(r.text)
#你可以自己尝试print一下r.text的内容,然后再阅读下面的代码。
result = answer['translateResult'][0][0]['tgt']
return result

2.Tkinter部分

Tkinter是Python的标准GUI库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

代码如下:

self.window = Tk()
self.fanyi = YouDaoFanyi()
self.window.title(u'翻译器')
#设置窗口大小和位置
self.window.geometry('310x370+500+300')
self.window.minsize(310,370)
self.window.maxsize(310,370)
#创建一个文本框
self.result_text1 = Text(self.window,background = 'azure')
self.result_text1.place(x = 10,y = 5,width = 285,height = 155)
self.result_text1.bind("<Key-Return>",self.submit1)
#创建一个按钮
#为按钮添加事件
self.submit_btn = Button(self.window,text=u'翻译',command=self.submit)
self.submit_btn.place(x=205,y=165,width=35,height=25)
self.submit_btn2 = Button(self.window,text=u'清空',command = self.clean)
self.submit_btn2.place(x=250,y=165,width=35,height=25)
#翻译结果标题
self.title_label = Label(self.window,text=u'翻译结果:')
self.title_label.place(x=10,y=165)
#翻译结果
self.result_text = Text(self.window,background = 'light cyan')
self.result_text.place(x = 10,y = 190,width = 285,height = 165)

让我们来看看效果图:

嚯,虽然有一些单调,但是能做到这样还是很不错的。

打包

做好程序后,我们可以将其打包,这样以后不管电脑上有没有python环境,我们都可以使用这个软件来进行翻译,下面来交大家一个简单的python打包方法。

首先安装PyInstaller第三方库。

pip install Pylnstaller

然后使用cmd,切换到需要打包的python程序的存储目录,然后输入该语句即可完成打包。

pyinstaller -F -w xxx.py


以上就是本文的全部内容了,希望能够对大家的学习起到一定的帮助作用!


获取源码:

点击上方名片,关注后,回复「翻译」即可获得源码。


如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


Python自学超级硬核资料


最后送大家一份Python学习大礼包,从Python基础,爬虫,数据分析Web开发等全套资料,吃透资料,你可以扔掉其他资料,这些资料都是视频,学起来非常友好 


Ps:都是视频学习资料,非常适合基础不好或者零基础的同学



推荐阅读

  1. 室友用Python创造了一个深度学习框架,当场惊艳面试官

  2. 985 研究生组团诈骗,一个中招就关 App,涉案金额超 1 亿,受害人遍布全国

  3. 华为奇葩面试题:一头牛重800公斤一座桥承重700公斤,请问牛怎么过桥?

  4. 618 百万粉丝大V带你脱单

  5. 面试通关秘籍(内含200道C++面试真题)

看完记得关注@Python绿色通道
及时收看更多好文
↓↓↓
good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter