Home

bs4+requests+tkinter 实现一个简易翻译小程序

2020/02/02

之前看到旁边的妹子用着有道翻译pc版,突然灵机一动想自己写一个简单的翻译小程序。
思路是:
1、用bs4和requests写个简单的爬虫翻译。(main.py)
2、用tkinter实现一个简单的图形化界面。(GUI.py)

1、main.py:

这里选择的翻译网站是金山词霸,打开金山词霸,输入“have fun”测试发现url变为:
image
url后面为所输入的需要翻译的词语/短语,所以可以通过直接拼接url并访问得到想要的翻译。
对访问到的网页用bs4进行过滤得到想要得到的翻译信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
from bs4 import BeautifulSoup
def trans(word):
url = "http://www.iciba.com/"
html =requests.get(url+word).text
soup = BeautifulSoup(html,'html.parser')
trans_list = soup.find_all('li', class_='clearfix')
if trans_list == []: #判断为空,则没有翻译
return '无对应翻译,请检查拼写是否正确!'
translation = ''
for trans in trans_list:
translation = translation + trans.text.replace('\n',' ').replace(' ','') + '\n'
return translation

2、GUI.py:

之前在写AES加密解密程序的时候用到了easyGUI实现图形化界面,easyGUI真的很easy,但是功能也很简易。然后看了下发现tkinter可以实现事件(消息)循环,就学习了tkinter的使用方法,写了一个简单的图形化界面的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import tkinter
import main
window = tkinter.Tk()
var = tkinter.StringVar()
window.title('translator')
window.geometry()
l1 = tkinter.Label(window,text='请输入需要翻译的内容:')
l1.grid(row=0)
e1 = tkinter.Entry(window)
e1.grid(row=0,column=1)
def trans():
word = e1.get()
translation = main.trans(word)
var.set(translation)
b = tkinter.Button(window,text="翻译",command=trans)
b.grid(row=1,columnspan=2,sticky='W'+'E')
l2 = tkinter.Label(window,textvar=var)
l2.grid(columnspan=2)
window.mainloop()

3、运行结果:

image

这个程序目前还有一些漏洞,比如翻译的是句子或者非词库中的词语的话无法得到翻译内容,等之后再来完善一下叭_(:3J∠)_