zoukankan      html  css  js  c++  java
  • 基于python语言爬取有道翻译实现的翻译小软件

    基于python语言爬取有道翻译实现的翻译小软件

    使用tkinter模块实现界面
    使用requests模块实现翻译内容的爬取功能
    
    from tkinter import *
    from tkinter import messagebox
    import requests
    
    
    # ========翻译功能实现========== #
    def translation():
        content = entry.get()
        content = content.strip()
        if content == '':
            messagebox.showinfo('提示', message='请输入要翻译的内容')
        else:
            # 设置head是为了防止网站检测封锁ip
            head = {}
            head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Mobile Safari/537.36'
            url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
            data = {}
            data['i'] = content
            data['from'] = 'AUTO'
            data['to'] = 'AUTO'
            data['smartresult'] = 'dict'
            data['client'] = 'fanyideskweb'
    
            # data['salt'] = '15804708082714'
            # data['sign'] = '41c02d0f45b83abcbd3ef081478a291a'
            # data['ts'] = '1580470808271'
            # data['bv'] = '8c1d961492d2126df817a1dafe4e9e56'
    
            data['doctype'] = 'json'
            data['version'] = '2.1'
            data['keyfrom'] = 'fanyi.web'
            data['action'] = 'FY_BY_CLICKBUTTION'
    
            result = requests.post(url, data, head)
            result = result.json()
            result = result['translateResult'][0][0]['tgt']
            res.set(result)
    
    
    # ========界面实现========== #
    # 创建窗口
    window = Tk()
    # 设置窗口大小
    window.geometry('500x100+500+250')
    # 设置标题
    window.title('基于python的翻译小项目')
    
    # 控件(提示文字)
    label = Label(window, text='请输入要翻译的内容:', font=('隶书', 18), fg='orange')
    label.grid(row=0, column=0)
    # 输入框
    entry = Entry(window, font=('隶书', 18))
    entry.grid(row=0, column=1)
    
    # 控件(提示文字)
    label1 = Label(window, text='翻译结果:', font=('隶书', 18), fg='orange')
    label1.grid(row=1, column=0)
    # 输入框(这里设置一个随时变化的变量,显示输出结果)
    res = StringVar()
    entry1 = Entry(window, font=('隶书', 18), textvariable=res)
    entry1.grid(row=1, column=1)
    
    # 按钮
    button = Button(window, text='翻译', width=10, command=translation)
    button.grid(row=2, column=0, sticky=W)
    button = Button(window, text='退出', width=10, command=window.quit)
    button.grid(row=2, column=1, sticky=W)
    
    # 显示窗口
    window.mainloop()
    
    


    360版本

    import requests
    import json
    from tkinter import Tk, Text, Button, Entry, NSEW, StringVar, messagebox, END
    
    
    def translation():
        query = entry.get().strip()
        if query == '':
            messagebox.showinfo('提示', message='请输入要翻译的内容')
        else:
            if check_contain_chinese(query):
                eng = 0
            else:
                eng = 1
            url = 'http://fanyi.so.com/index/search'
            headers = {
                'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
                'Accept': 'application/json, text/plain, */*',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,zh;q=0.9',
                'Connection': 'keep-alive',
                'Content-Length': '0',
                'Cookie': '',
                'Host': 'fanyi.so.com',
                'Origin': 'http://fanyi.so.com',
                'pro': 'fanyi',
                'Referer': 'http://fanyi.so.com/'
            }
    
            data = {}
            data['eng'] = eng  # 中->英:0  英->中:1
            data['validate'] = ''
            data['ignore_trans'] = 0
            data['query'] = query
    
            response = requests.post(url, headers=headers, data=data)
            response = json.loads(response.text)
            if eng == 0:
                text.delete(1.0, END)
                text.insert(1.0, response['data']['fanyi'])
            else:
                try:
                    if response['data']['explain']['translation'] != None:
                        text.delete(1.0, END)
                        for i in response['data']['explain']['translation']:
                            text.insert(1.0, i + '
    ')
    
                except:
                    text.delete(1.0, END)
                    text.insert(1.0, response['data']['fanyi'])
    
    
    def check_contain_chinese(check_str):
        for ch in check_str:
            if u'u4e00' <= ch <= u'u9fff':
                return True
        return False
    
    
    if __name__ == '__main__':
        root = Tk()
        win_width = root.winfo_screenwidth()
        win_height = root.winfo_screenheight()
        root.geometry('385x220+' + str(int(win_width / 2 - 192)) + '+' + str(int(win_height / 2 - 110)))
        root.minsize(385, 220)
        root.maxsize(385, 220)
        root.title('360翻译小软件-敲出一片天')
    
        query = StringVar()
        query.set('请输入需要翻译的内容')
        entry = Entry(root, width=20, font=('隶书', 18), textvariable=query)
    
        entry.grid(row=0, column=0, pady=10, padx=10, sticky=NSEW)
        button = Button(root, text='翻译', command=translation)
        button.grid(row=0, column=1, pady=10, padx=10, sticky=NSEW)
        result = StringVar()
        text = Text(root, width=30, height=6, font=('隶书', 18))
        text.grid(row=1, column=0, columnspan=2, pady=10, padx=10, sticky=NSEW)
    
        root.mainloop()
    
    
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    大数减法
    MySQL配置的一些坑
    最大流_Edmonds-Karp算法
    最小生成树两连
    最短路三连
    对拍
    Broadcast
    Intent
    Custom Views
    Fragment
  • 原文地址:https://www.cnblogs.com/zq98/p/15027984.html
Copyright © 2011-2022 走看看