Python tkinter + 爬虫,实现简单的翻译功能

相关思路及步骤:

1. 导入所需的库:hashlib(用于MD5加密)、json(用于处理返回的JSON数据)、random(用于生成随机数)、time(用于获取时间戳)、requests(用于发送HTTP请求)和tkinter(用于创建GUI界面)。如果没有下载,可使用以下指令进行下载:

pip install packagename/包名
# example
pip install requests

2. 定义一个名为Translate的类,其中包含一个构造函数、一个清空输入框的函数、一个清空输出框的函数和一个翻译函数。

3. 在构造函数中,创建一个名为window的tkinter窗口,设置窗口标题为“英汉互译”,禁止调整窗口大小,创建一个输入框、一个文本展示框和三个按钮。

4. 定义一个名为gui_arrang的函数,用于完成页面元素布局,设置各部件的位置。

5. 定义一个名为fanyi的函数,用于实现翻译功能。首先获取输入框中的文本,然后获取时间戳和随机数,将它们组合成一个字符串作为salt。对输入的文本进行MD5加密,得到sign。然后发送POST请求到翻译接口,获取返回的JSON数据,解析后得到翻译结果。最后将翻译结果添加到输出框中。

6. 定义一个名为cle的函数,用于清空输出框的内容。

7. 定义一个名为cle_e的函数,用于清空输入框的内容。

8. 在主函数main中,创建一个Translate对象,调用gui_arrang函数,进入tkinter的主循环。

 

代码如下: 

import hashlib
import json
import random
import time
import requests
from requests.exceptions import RequestException
import tkinter as tk


class Translate:
    def __init__(self):
        # 创建window窗口
        self.window = tk.Tk()
        # 定义窗口名称
        self.window.title("英汉互译")
        # 禁止调整窗口大小
        self.window.resizable(0, 0)
        # 创建一个输入框,并设置尺寸
        self.input = tk.Entry(self.window, width=80, font='楷体')
        # 创建一个文本展示框,并设置尺寸
        self.info = tk.Text(self.window, height=10, font='楷体')
        # 添加一个按钮,
        self.t_button = tk.Button(self.window, text="翻译", width=10, height=1, font='楷体', command=self.fanyi)
        # 添加一个按钮,
        self.c_button1 = tk.Button(self.window, text="清空输入", width=10, height=1, font='楷体', command=self.cle_e)
        # 添加一个按钮,
        self.c_button2 = tk.Button(self.window, text="清空输出", width=10, height=1, font='楷体', command=self.cle)

    def gui_arrang(self):
        """完成页面元素布局,设置各部件的位置"""
        self.input.grid(row=0, sticky="W", padx=1)
        self.info.grid(row=1)
        self.t_button.grid(row=2, column=0, padx=2)
        self.c_button1.grid(row=3, column=0, padx=2)
        self.c_button2.grid(row=4, column=0, padx=2)

    def fanyi(self):
        words = self.input.get()
        # 获取时间戳
        lts = str(int(time.time() * 1000))
        # 获取一个0~10的随机整数,并转化为字符类型
        num = str(random.randint(0, 10))
        salt = lts + num
        # md5加密
        sign = hashlib.md5(("fanyideskweb" + words + salt + "Ygy_4c=r#e#4EX^NUGUc5")
                           .encode()).hexdigest()
        # 请求网址参数,作为翻译的数据传入请求接口
        data = {
            "i": words,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "lts": lts,
            "bv": "37dd3c60883fcf3fdfbbfa8fa2c4565d",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }
        # 请求网址
        # 请求头,模拟浏览器发送请求
        url = ' https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        header = {
            "Referer": 'https://fanyi.youdao.com/',
            "cookie": 'OUTFOX_SEARCH_USER_ID=-508254706@10.110.96.160; '
                      'OUTFOX_SEARCH_USER_ID_NCOO=355848745.519305; ___rl__test__cookies=1668344926319',
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                          ' Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.42'
        }
        try:
            # 向浏览器发送请求
            res = requests.post(url, data=data, headers=header)
            # 返回json数据解析
            res_dic = json.loads(res.text)
            # print(res_dic)
            word = res_dic["translateResult"][0][0]["tgt"]
            # 输出翻译内容前,先清空输出框的内容
            self.info.delete(1.0, "end")
            # 将翻译结果添加到输出框中
            try:
                # 获取到res_dic列表中["smartResult"]["entries"]下的所有内容
                words_list = res_dic["smartResult"]["entries"][1:]
                word_list = [word.strip() for word in words_list]
                # print(word_list)
                for i in range(0, len(word_list)):
                    self.info.insert('end', word_list[i])
                    self.info.insert('end', '\n')
            except:
                self.info.insert('end', word)
        except RequestException:
            self.info.insert('end', "发生错误")

    def cle(self):
        """定义一个函数,用于清空输出框的内容"""
        self.info.delete(1.0, "end")  # 从第一行清除到最后一行

    def cle_e(self):
        """定义一个函数,用于清空输入框的内容"""
        self.input.delete(0, "end")


# 测试函数
def main():
    t = Translate()
    t.gui_arrang()
    tk.mainloop()


# 调试
if __name__ == '__main__':
    main()

效果展示:

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python tkinter爬虫是使用Python中的tkinter库来开发图形化界面的爬虫程序。使用tkinter库可以方便地创建窗口,并在窗口中添加各种控件,如文本框、按钮、进度条等,以实现用户友好的界面交互。爬虫部分可以使用Python的相关库来进行网页爬取、数据提取等操作。这样用户可以通过图形化界面来输入爬取的目标网址、设置爬取参数,并直观地查看爬取结果。有关如何使用tkinter开发爬虫程序的详细教程和示例可以参考和的资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python tkinter库窗口化爬虫](https://blog.csdn.net/qq_44924407/article/details/109251425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [使用 Tkinter 写一个爬虫的辅助软件——HTTP测试工具(Python)](https://blog.csdn.net/qq_39832685/article/details/123694657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值