告别网页搜索!教你用python实现一款属于自己的翻译词典软件


Posted in Python onJune 03, 2021

一、设计理念

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实现一款属于自己的翻译词典软件

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

Python 相关文章推荐
Python易忽视知识点小结
May 25 Python
详细介绍Python的鸭子类型
Sep 12 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
python获取url的返回信息方法
Dec 17 Python
Python中函数参数匹配模型详解
Jun 09 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
You might like
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
python实现自动网页截图并裁剪图片
2018/07/30 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
Python:slice与indices的用法
2019/11/25 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
试述DBMS的主要功能
2016/11/13 面试题
理工类毕业自我鉴定
2014/02/20 职场文书
社区反邪教工作方案
2014/06/16 职场文书
应届生面试求职信
2014/07/02 职场文书
逃课检讨书
2015/01/26 职场文书
班级联欢会主持词
2015/07/03 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
详解mysql三值逻辑与NULL
2021/05/19 MySQL
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers