python翻译软件(request请求,tkinter界面)

本文介绍了一款基于Python的有道翻译查询工具,利用requests和BeautifulSoup库抓取有道翻译网站的数据,并通过tkinter实现简洁的GUI界面,便于用户输入单词或短语进行实时翻译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了方便查单词的需要,利用python编写了一个翻译的小程序。

需要pip 安装 requests 和 beautifulsoup,打包要安装pyinstaller

目录

实现原理:

软件界面:

编程实现过程:

request请求:

 数据处理: 

界面:

源码:


实现原理:

通过request请求http://www.youdao.com/w/查询词网址查询有道翻译的结果,

利用beautifulsoup从返回的网页中提取查询结果,

使用tkinter编写简单的界面实现控制。

最后加上图标使用pyinstaller打包成一个exe文件方便使用

 

软件界面:

编程实现过程:


request请求:

得到查询网址:

import requests
import time

base_url = 'http://www.youdao.com/w/'#查询网址

word = input()#word是要查询的词

url = base_url + word

请求网址获取翻译结果网页,请求失败自动重试: 

    success = False
    failCount=0
    while(not success and failCount<10):
        try:
            r = requests.get(url)
            #print(r.status_code)    # 获取返回状态
            html = r.text    #保存网页
            success = True
        except:
            print("请求异常,重试中.")
            success = False
            failCount += 1
            time.sleep(0.2)    #延时0.2s后重试

数据处理: 

得到网页翻译结果显示区内容:

    soup = BeautifulSoup(html,'html.parser')
    result = soup.find("div",{"class":"trans-container"})#根据网页结构获取翻译区内容
    x = str(result)
    print(x)#查看翻译区内容

 将结果html分析转成列表:

    soup = BeautifulSoup(x,'html.parser')
    #EN to CH英文转中文
    transList = list(map(lambda x:x.getText(),soup.findAll("li")))
    
    #CH to EN中文转英文
    if(len(transList)==0):
        transList = list(map(lambda x:x.getText(),soup.findAll("p")))
        if transList[-1] == "论文要发表?专家帮你译!":#删除广告

界面:

使用tkinter设计界面具体设计见源码,使用了Entry输入,按钮开始翻译,Listbox进行结果显示,使用一个变量hidden记录,Listbox调用pack和forget完成界面的展开与收回。

实现输入框回车进行查询的语句:

def send(event=None):
    pass#这里写查询过程

inputEntry = Entry()
inputEntry.bind('<Return>',send)#绑定回车与send自定义方法,send是执行查询的方法

 

源码:

#http://www.youdao.com/w/查询词
import requests
#import urllib.request
import time
from bs4 import BeautifulSoup
from tkinter import *

root=Tk()
try:
    root.iconbitmap('tr.ico')
except:
    print("请在当前目录下放入tr.ico以显示图标")

root.title('在线翻译')
base_url = 'http://www.youdao.com/w/'

def send(event=None):
    word = inputEntry.get()
    url = base_url + word
    print(url)
    html = ''
    
    success = False
    failCount=0
    while(not success and failCount<10):
        try:
            r = requests.get(url)
            #print(r.status_code)    # 获取返回状态
            html = r.text
            '''
            r = urllib.request.urlopen(url)
            html = r.read()
            r.close()
            '''
            success = True
        except:
            print("请求异常,重试中.")
            success = False
            failCount += 1
            time.sleep(0.2)
    
    soup = BeautifulSoup(html,'html.parser')
    result = soup.find("div",{"class":"trans-container"})
    x = str(result)
    print(x)
   
    soup = BeautifulSoup(x,'html.parser')
    #EN to CH
    transList = list(map(lambda x:x.getText(),soup.findAll("li")))
    
    #CH to EN
    if(len(transList)==0):
        transList = list(map(lambda x:x.getText(),soup.findAll("p")))
        if transList[-1] == "论文要发表?专家帮你译!":#删除广告
            del transList[-1]

        
    v.set(transList)
    listBox.pack(fill="x")
    global hidden
    hidden = False
    htext.set("^")
   
def hideListBox():
    global hidden
    if(hidden):
        listBox.pack(fill="x")
        hidden = False
        htext.set("^")
        print(hidden)
    else:
        listBox.forget()
        hidden = True
        htext.set("v")
        print(hidden)
    
upperFrame = Frame(root) 
inputEntry = Entry(upperFrame,width=26,font=("DFKai-SB",12))
inputEntry.bind('<Return>',send)
sendButton = Button(upperFrame,text="翻译",command=send)
htext = StringVar()
htext.set("v")
hideButton = Button(upperFrame,textvariable=htext,command=hideListBox,width=3)
hidden = True

v=StringVar()
listBox = Listbox(root,listvariable=v,height=6)
inputEntry.pack(side="left",anchor="w",fill="x",padx="2")
hideButton.pack(side="right",anchor="ne",padx='2')
sendButton.pack(side="right",anchor="ne")

upperFrame.pack(fill="x")
root.mainloop()

可执行程序

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值