一、设计理念

1.先写一个登录的py文件,用python的tkinter库
2.再写一个py文件用于爬取有道翻译输出栏的内容
3.再利用python的tkinter库,完成软件运行的窗口
4.将窗口的返回值与爬取有道翻译的结果接口对一下
5.第二个py文件里import第一个py文件,两个文件相关联

二、代码解析

请求方式为post,要注意from data里的值,这里可以在网页上再输一个想要翻译的内容,观察from data里的值的变化,可以确定’salt’、 ‘sign’、 ‘lts’这三个值变化
进入网页源代码搜索.js,找到对应的js文件,找到他们的加密规则,最后将获得的response转化为字典,提取结果

class youdao(object):
    a.loginpage()
    def __init__(self):
        pass

    def crawl(self, content):
        # 进入网页源代码搜索.js  点击进入搜索看是否有'salt''sign''lts'这三个 有则证明找的文件正确 全部复制 网页搜js格式化转化  创建js文件
        lts = int(time.time() * 1000)    # 时间戳转化为毫秒    时间戳转化为时间 站长工具
        timestamp = lts + random.randint(0, 10)
        # sign: n.md5("fanyideskweb" + e + i + "tbh5e8=q6u3exe+&l[4c@")

        a = "fanyideskweb"
        e = content
        i = str(timestamp)
        d = "tbh5e8=q6u3exe+&l[4c@"
        sign = hashlib.md5((a+e+i+d).encode('utf-8')).hexdigest()
        data = {
            'i': content,
            'from': 'auto',
            'to': 'auto',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': timestamp,
            'sign': sign,
            'lts': lts,
            'bv': 'dd67d51c2bbb03cccdbcfa48735ba27f',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'fy_by_clickbuttion'
        }
        data = urllib.parse.urlencode(data).encode('utf-8')
        headers = {
                    'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36',
                    'cookie': 'outfox_search_user_id=406040753@221.204.120.171; dict_ugc=be3af0da19b5c5e6aa4e17bd8d90b28a|; jsessionid=abcjcdifpyue3engyi3dx; outfox_search_user_id_ncoo=902501357.1460881; user-from=http://www.youdao.com/; from-page=http://www.youdao.com/; _ntes_nnid=250706e8175b6796101a34821527eb62,1612611490655; dict_sess=v2|qklfgggmbvoaofp40fqy0uwhfpuomzwrlfk4qz0lyertu0flfn4ul0l50he40fow0tk6llwrf6b0w46lymh46f0jshmtlofom0; dict_login=1||1612612510172; study_sess=etwvt8khyxqnlv8r0zdde8fcmoicmtzsislteikziaqq44wpvnn6pupszwykikbkfygqdvklxu7p3af+p0h6vczlod3s2bld6h/ewiphmrs92qg/3vvhsxhfaxq2yjp8qyh/r6relnstkdvewvkzp+nygwhzlamzu5dl6abiyq2ybdo8mpdapqb26wr6jpau+p6mxcmnjevne6ppmc9ttjjnthnrm7aj0x5lvpsbvjz0h3m1drl4zsmtkumihrpyk1pbnevj8uems52cj8dfo+yez89xrbg4rxsvfsmuh21kloh/gwx6g1s/x4fq7qd/z2ldsk6qgl21md/1bcxa/orloi9qobm4n2yvcvhvkddg5ilqezb8iskcpua+eszk; study_info=uid_10ae81f6ef9dd9807bac3ff3fd6407ba|4|1456638755|1612612364854; ___rl__test__cookies=1612663596564',
                    'referer': 'http://fanyi.youdao.com/',
                }
        request = urllib.request.request('http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule',
                                         method='post', data=data, headers=headers)
        response = urllib.request.urlopen(request)
        result_str = response.read().decode('utf-8')
        result_dict = json.loads(result_str)
        result = result_dict["translateresult"][0][0]["tgt"]
        return result

三、软件窗口界面

尤其注意按钮这个地方

self.button = button(self.window, text=u’查询’, command=self.function)
command命令执行function

class application(object):
    def __init__(self):
        # 创建一个窗口
        self.window = tk()
        # 窗口标题
        self.window.title(u'武亮宇翻译词典')
        # 设置窗口大小位置
        self.window.geometry("280x350+400+150")
        # 输入框
        self.entry = entry(self.window)
        self.entry.place(x=10, y=10, width=200, height=25)  # width=宽度, height=高度
        # 查询按钮
        self.button = button(self.window, text=u'查询', command=self.function)        # command执行命令的意思 执行这个函数
        self.button.place(x=220, y=10, width=50, height=25)
        # 翻译结果标题
        self.label = label(self.window, text=u'翻译结果:')
        self.label.place(x=10, y=45)
        # 翻译框
        self.text = text(self.window, background='#ccc')           # 设置背景颜色
        self.text.place(x=10, y=75, width=260, height=265)

function这块要把爬虫返回的值和窗口的翻译框做一下接口

def function(self):
        # 从输入框中获取用户的值
        content = self.entry.get()
        # 把值发送给有道服务器进行翻译
        youdao = youdao()
        result = youdao.crawl(content)
        # 把结果放在翻译框里
        self.text.delete(1.0, end)      # 每次查询先删除一下
        self.text.insert(end, result)   # 插入文本最后的位置 导入end库

四、源码展示

import urllib.request     # 发送网络请求
import urllib.parse        # 参数解析
import time
import random
import hashlib
import json
from tkinter import tk, entry, button, label, text, end  # tk(创建窗口), entry(输入框), button(按钮), label(标签), text(文本框),
# end
import a

class youdao(object):
    a.loginpage()
    def __init__(self):
        pass

    def crawl(self, content):
        # 进入网页源代码搜索.js  点击进入搜索看是否有'salt''sign''lts'这三个 有则证明找的文件正确 全部复制 网页搜js格式化转化  创建js文件
        lts = int(time.time() * 1000)    # 时间戳转化为毫秒    时间戳转化为时间 站长工具
        timestamp = lts + random.randint(0, 10)
        # sign: n.md5("fanyideskweb" + e + i + "tbh5e8=q6u3exe+&l[4c@")

        a = "fanyideskweb"
        e = content
        i = str(timestamp)
        d = "tbh5e8=q6u3exe+&l[4c@"
        sign = hashlib.md5((a+e+i+d).encode('utf-8')).hexdigest()
        data = {
            'i': content,
            'from': 'auto',
            'to': 'auto',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': timestamp,
            'sign': sign,
            'lts': lts,
            'bv': 'dd67d51c2bbb03cccdbcfa48735ba27f',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'fy_by_clickbuttion'
        }
        data = urllib.parse.urlencode(data).encode('utf-8')
        headers = {
                    'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/84.0.4147.125 safari/537.36',
                    'cookie': 'outfox_search_user_id=406040753@221.204.120.171; dict_ugc=be3af0da19b5c5e6aa4e17bd8d90b28a|; jsessionid=abcjcdifpyue3engyi3dx; outfox_search_user_id_ncoo=902501357.1460881; user-from=http://www.youdao.com/; from-page=http://www.youdao.com/; _ntes_nnid=250706e8175b6796101a34821527eb62,1612611490655; dict_sess=v2|qklfgggmbvoaofp40fqy0uwhfpuomzwrlfk4qz0lyertu0flfn4ul0l50he40fow0tk6llwrf6b0w46lymh46f0jshmtlofom0; dict_login=1||1612612510172; study_sess=etwvt8khyxqnlv8r0zdde8fcmoicmtzsislteikziaqq44wpvnn6pupszwykikbkfygqdvklxu7p3af+p0h6vczlod3s2bld6h/ewiphmrs92qg/3vvhsxhfaxq2yjp8qyh/r6relnstkdvewvkzp+nygwhzlamzu5dl6abiyq2ybdo8mpdapqb26wr6jpau+p6mxcmnjevne6ppmc9ttjjnthnrm7aj0x5lvpsbvjz0h3m1drl4zsmtkumihrpyk1pbnevj8uems52cj8dfo+yez89xrbg4rxsvfsmuh21kloh/gwx6g1s/x4fq7qd/z2ldsk6qgl21md/1bcxa/orloi9qobm4n2yvcvhvkddg5ilqezb8iskcpua+eszk; study_info=uid_10ae81f6ef9dd9807bac3ff3fd6407ba|4|1456638755|1612612364854; ___rl__test__cookies=1612663596564',
                    'referer': 'http://fanyi.youdao.com/',
                }
        request = urllib.request.request('http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule',
                                         method='post', data=data, headers=headers)
        response = urllib.request.urlopen(request)
        result_str = response.read().decode('utf-8')
        result_dict = json.loads(result_str)
        result = result_dict["translateresult"][0][0]["tgt"]
        return result


class application(object):
    def __init__(self):
        # 创建一个窗口
        self.window = tk()
        # 窗口标题
        self.window.title(u'武亮宇翻译词典')
        # 设置窗口大小位置
        self.window.geometry("280x350+400+150")
        # 输入框
        self.entry = entry(self.window)
        self.entry.place(x=10, y=10, width=200, height=25)  # width=宽度, height=高度
        # 查询按钮
        self.button = button(self.window, text=u'查询', command=self.function)        # command执行命令的意思 执行这个函数
        self.button.place(x=220, y=10, width=50, height=25)
        # 翻译结果标题
        self.label = label(self.window, text=u'翻译结果:')
        self.label.place(x=10, y=45)
        # 翻译框
        self.text = text(self.window, background='#ccc')           # 设置背景颜色
        self.text.place(x=10, y=75, width=260, height=265)

    def function(self):
        # 从输入框中获取用户的值
        content = self.entry.get()
        # 把值发送给有道服务器进行翻译
        youdao = youdao()
        result = youdao.crawl(content)
        # 把结果放在翻译框里
        self.text.delete(1.0, end)      # 每次查询先删除一下
        self.text.insert(end, result)   # 插入文本最后的位置 导入end库

    def run(self):
        self.window.mainloop()


if __name__ == '__main__':
    app = application()
    app.run()

# !/usr/bin/nev python
# -*-coding:utf8-*-
import tkinter
import tkinter.messagebox
class loginpage(object):
    def __init__(self):
        #声明两个变量
        self.win = tkinter.tk()  # 窗口
        self.username = tkinter.stringvar()
        self.password = tkinter.stringvar()
        self.n=2
        self.createform()
    def login(self):
        if self.username.get()=='新星计划' and self.password.get()=='新星计划':
            print('登录成功')
            tkinter.messagebox.showinfo(title='登录信息',message='登录成功')
            self.win.quit()
        elif self.n==0:
            print('你没有权限进入该系统')
            self.win.quit()
        else:
            print('登录失败')
            print('账号或密码错误,你还有%d次机会'%self.n)
            tkinter.messagebox.showerror(title='登录信息',message='登录失败')
        self.n-=1
    def createform(self):
        self.win.title('登录界面')
        self.win.geometry("280x200+400+150")
        #创建标签
        labelname = tkinter.label(self.win,text='用户名:',justify=tkinter.right,width = 100)
        labelname.place(x=35,y=50,width=80,height=20)
        #创建文本框
        entryname = tkinter.entry(self.win, width=150, textvariable=self.username)
        entryname.place(x=110, y=50, width=120, height=20)
        #创建密码标签
        labelpwd = tkinter.label(self.win,text='密  码:', justify=tkinter.right,width=80)
        labelpwd.place(x=35, y=80, width=80, height=20)
        #创建密码的文本框
        entrypwd = tkinter.entry(self.win, width=150,textvariable=self.password)
        entrypwd.place(x=110, y=80, width=120, height=20)
        #创建button按钮
        buttonok = tkinter.button(self.win,text='登录',command=self.login)
        buttonok.place(x=95,y=130,width=50,height=20)
        #创建退出的按钮
        buttonquit = tkinter.button(self.win,text='退出',command=self.win.quit)
        buttonquit.place(x=145,y=130,width=50,height=20)
        self.win.mainloop()
if __name__ == '__main__':
    lg = loginpage()

一共两个py文件,赶快收藏啊,快去试试吧,能拥有自己的翻译词典!!!

五、效果展示

先看一下软件效果,先登录

各种语言都可以转换

到此这篇关于告别网页搜索!教你用python实现一款属于自己的翻译词典软件的文章就介绍到这了,更多相关python翻译词典软件内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!