告别网页搜索!教你用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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
Django 框架模型操作入门教程
Nov 05 Python
Python concurrent.futures模块使用实例
Dec 24 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
Python如何获取文件指定行的内容
May 27 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 Python
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
You might like
浅析PHP Socket技术
2013/08/02 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
js静态作用域的功能。
2006/12/25 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python如何通过protobuf实现rpc
2016/03/06 Python
Python3计算三角形的面积代码
2017/12/18 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
python爬虫容易学吗
2020/06/02 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
拾金不昧锦旗标语
2014/06/27 职场文书
预备党员考察意见范文
2015/06/01 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
解决mysql的int型主键自增问题
2021/07/15 MySQL