告别网页搜索!教你用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类的基础入门知识
Nov 24 Python
详细介绍Python语言中的按位运算符
Nov 26 Python
python实现的文件夹清理程序分享
Nov 22 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
如何通过python画loss曲线的方法
Jun 26 Python
Django如何使用redis作为缓存
May 21 Python
Python while true实现爬虫定时任务
Jun 08 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
解决python3安装pandas出错的问题
May 20 Python
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
You might like
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python从入门到精通(DAY 1)
2015/12/20 Python
Python中random模块生成随机数详解
2016/03/10 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
django 创建过滤器的实例详解
2017/08/14 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
通信研究生自荐信
2014/02/01 职场文书
应届毕业生求职信
2014/05/26 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
四大名著读书笔记
2015/06/25 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
nginx日志格式分析和修改
2022/04/28 Servers