用Python做一个翻译软件,比上浏览器快100倍

简单的用Python来做一个翻译软件

开发环境

Python 3.10
Pycharm

模块使用

requests -> pip install requests
hashlib
tkinter

案例分为三部分:

1. 爬虫: 获取翻译接口, 请求获取翻译结果问题1: 接口抓包分析问题2: 请求需要写cookie问题3: 不同文本翻译, s加密参数2. 界面: GUI界面开发3. 打包: 把py程序打包exe软件

为了大家能更好的学会案例,我还专门录制了视频进行详细讲解,文末点击名片自取即可。

基本流程

一、数据来源分析

1.明确需求

明确采集的网站以及数据内容
网址: https://******/text
数据: 翻译内容

2.抓包分析

通过浏览器开发者工具分析对应数据位置

  • 打开开发者工具
    • F12 / 右键点击检查选择network(网络)
  • 刷新网页
    刷新网页: 进入网页, 在网页页面上已经有数据
    输入/点击搜索/查询: 刚开始进入网页没有数据, 当我们执行某些操作之后返回
    下滑页面加载新的数据内容/点击翻页加载更多数据: 下滑网页/点击加载更多数据
  • 通过关键字搜索找到对应的数据位置
    • 关键字: 需要什么数据就搜什么数据

数据包地址: https://*****/api/transpc/text/result

二、代码实现步骤

1.发送请求

模拟浏览器对于url地址发送请求

模拟浏览器

可以直接复制: 开发者工具 -> 网络 -> 点击对应数据包 -> 标头 -> 请求标头 -> cookie/ua/referer…

  • 复制之后在代码中字典形式

请求网址

刚刚抓包分析找到链接地址, 直接复制粘贴即可

1.发送请求

一般使用: 第三方模块 requests 进行数据请求
-请求方法: 开发者工具 -> 网络 -> 点击对应数据包 -> 标头 -> 常规
POST GET
-请求参数
GET请求: 查询参数 (显性)
-直接在链接中显示, 可以不用额外构建
比如: https://f*****/text? keyword=%E4%BD%A0%E5%A5%BD&transfrom=auto&transto=en&model=general

POST请求: 表单数据/请求载荷 (隐性)
-开发者工具 -> 网络 -> 点击对应数据包 -> 载荷

2.获取数据

获取服务器返回响应数据

获取响应的json数据
json_data = response.json()
注意: 查看返回数据和在响应中是否一致

1.正常返回数据 (没有问题)
2.返回数据 (数据不是我们需要的) -> 被反爬了
3.没有返回数据 (空白面板) -> 被反爬了

如何解决:

1.考虑请求头添加的参数伪装不够完善,只是添加ua, 继续添加cookie参数…
2.请求参数/请求头 是否存在加密参数内容

3.解析数据

提取我们需要的数据内容

4.保存数据

把提取数据保存表格/文本/json/数据库

关于S加密参数逆向分析

对于不同翻译内容:

	text: 输入需要被翻译的内容 (文本内容) s: 不同文本内容值不同

1.根据s值, 进行全局搜索, 查看是否另外数据包返回
2.根据s键, 进行搜索, 查看值是从什么地方生成

	-根据s键名搜索返回内容过于多-根据堆栈 跟栈调试-XHR断点调试-搜索MD5加密关键代码MD5 -> 长度: 32位 由0-9 a-f组合起来

1.通过开发者工具搜索定位加密位置

2.断点调试分析

分析传入了什么参数, 调了什么方法进行加密处理


输入翻译内容, 执行翻译程序

程序会在我们断点位置暂停程序 -> 看到相关传入返回值
输入翻译内容, 执行翻译程序程序会在我们断点位置暂停程序 -> 看到相关传入返回值
D -> "1b921dbefaa8d939afca4068480f850d"
传入的参数 -> autozh-CHS你好109984457
1.当我们查看对应返回值之后, 和请求参数进行对比
2.长度: 32位 由0-9 a-f组合起来 md5加密- 验证是否为标准MD5加密 (魔改)

GUI界面开发


# 导入哈希模块
import hashlib
# 导入gui模块
import tkinter as tk
# 消息框
from tkinter import messageboxdef Click():try:# 获取输入框的内容key = input_va.get()# 进行翻译操作result = translation(key)# 先清空文本框text.delete('0.0', 'end')# 把翻译内容添加文本框中, 鼠标光标在那就添加在哪text.insert('insert', result)except:messagebox.showerror(title='错误信息', message='你输入的内容有误')# 创建窗口对象
root = tk.Tk()
# 设置窗口标题
root.title('翻译软件')
# 设置窗口大小
root.geometry('790x500+200+200')
# 固定窗口大小
root.resizable(False, False)
input_frame = tk.Frame(root)
input_frame.pack(pady=20)
# 设置可变变量
input_va = tk.StringVar()
# 设置文本标签
tk.Label(input_frame, text='请输入你要翻译内容: ', font=('微软雅黑', 20)).pack(side=tk.LEFT)
# 设置输入框
tk.Entry(input_frame,font=('微软雅黑', 20), textvariable=input_va).pack(side=tk.LEFT, fill=tk.BOTH, padx=20)
# 设置按钮
tk.Button(input_frame, text='翻 译', font=('微软雅黑', 20), command=Click).pack(side=tk.LEFT)
text_frame = tk.Frame(root)
text_frame.pack()
text = tk.Text(text_frame,font=('微软雅黑', 20))
text.pack()
# 展示窗口
root.mainloop()

打包EXE

打包的话使用pyinstaller ,具体操作视频有详细讲解

pyinstaller -F-w 翻译.py

成品展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269907.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

PHP多场地预定小程序系统源码

一键畅游多地!多场地预定小程序的超实用指南 段落一:【开篇:告别繁琐,预订新体验】 🎉🚀 还在为多个活动或会议的场地预订而头疼不已吗?多场地预定小程序来拯救你啦!它像是一位贴心…

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具,用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机,并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

blender使用- 置换修改器

置换修改器 对于物体可以先做细分,然后添加置换修改器,添加贴图。再对贴图的参数进行修改,渲染想要的效果。 旋转模式下(按下s),z表示方向,0表示平整

水源地(水库)泵闸远程控制与调度系统

水源地(水库)泵闸远程控制与调度系统是智慧水利管理领域的重要组成部分。这一系统集现代通信、自动化控制、物联网及大数据分析技术于一体,旨在实现对水源地(水库)泵闸设备的远程监控、智能调度和高效管理。还能够为管…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)

Github 2024-07-26开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目2TypeScript项目2C++项目2HTML项目1Python项目1C#项目1Lua项目1JavaScript项目1Vue项目1C项目1免费编程学习平台:freeCodeCamp.org 创…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现(野指针)insert实现(迭代器位置意义改变)insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

中断中使用事件组

文章目录 在中断里面使用事件组来改造程序配置MPU6050中断,PB5 INT![image.png](https://img-blog.csdnimg.cn/img_convert/14b1358946990cf8bd07a6e65c1fb7f0.png)配置mpu6050的中断引脚怎么使能mpu6050中断寄存的如下 注意:如果使用了中断后没出现想要…

移植江科大OLED显示汉字需要设置UTF-8格式

1.并且需要添加 --no-multibyte-chars //为了让软件能够识别到UTF-8的字符

zh echarts样式

记录一下: 一个图的配置 在echarts官网demo界面 option {title: {text: },legend: {data: [xxx前, xxx后]},radar: {// shape: circle,name: {// 雷达图各类别名称文本颜色textStyle: {color: #000,fontSize: 16}},indicator: [{ name: 完整性, max: 1 },{ name:…

二叉树_堆(下卷)

前言 接前面两篇的内容,接着往下讲二叉树_堆相关的内容。 正文 那么,回到冒泡排序与堆排序的比较。 我们知道冒泡排序的时间复杂度为 O ( N 2 ) O(N^2) O(N2),这个效率是不太好的。 那么,我们的堆排序的时间复杂度如何呢&…

《数据结构:链表递归实现二叉树》

文章目录 一、链式结构二叉树二、链式二叉树的遍历1、遍历方式2、前序遍历3、中序遍历4、后序遍历 三、链式二叉树结点个数和高度等1、二叉树结点的个数2、二叉树叶子结点的个数3、第K层结点的个数4、树的深度5、找值所在的结点6、二叉树销毁 四、借助队列完成二叉树的操作1、队…

react.16+

1、函数式组件 在vite脚手架中执行&#xff1a; app.jsx: import { useState } from react import reactLogo from ./assets/react.svg import viteLogo from /vite.svg import ./App.cssfunction App() {console.log(this)return <h2>我是函数式组件</h2> }exp…

leetcode-104. 二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,n…

全能数据分析工具:Tableau Desktop 2019 for Mac 中文激活版

Tableau Desktop 2019 一款专业的全能数据分析工具&#xff0c;可以让用户将海量数据导入并记性汇总&#xff0c;并且支持多种数据类型&#xff0c;比如像是编程常用的键值对、哈希MAP、JSON类型数据等&#xff0c;因此用户可以将很多常用数据库文件直接导入Tableau Desktop&am…

字符串的引入和注意事项

首先&#xff0c;他和整型一样————int data[ ]{1,2,3,4,5}; 和整型数组一个道理————char str[ ]{h,a,l,l,o}; 还可以直接表达成这样————char str[ ]"hallo";字符串变量&#xff0c;可以被修改 或者用另一种方式————char *p"hallo";字符…

C# 使用pythonnet 迁入 python 初始化错误解决办法

pythonnet 从 3.0 版本开始&#xff0c;必须设置Runtime.PythonDLL属性或环境变量 例如&#xff1a; string pathToVirtualEnv ".\\envs\\pythonnetTest"; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, "python39.dll"); PythonEngine.PythonHom…

.Net 检验信息采集及管理系统LIS,成熟的医院实验室管理系统源码

检验管理系统LIS实现了检验信息电子化、检验信息管理自动化&#xff0c;具备与医嘱双向沟通、采用条码管理手段、财务自动计费、仪器双向控制等重要功能特点。其工作流程为通过门诊医生和住院工作站提出检验申请&#xff0c;生成相应患者的化验条码标签&#xff0c;在生成化验单…

计算机专业MEM工程管理硕士课程介绍

计算机专业MEM&#xff08;工程管理硕士&#xff09;的主要学习内容涵盖了工程技术、管理学和经济学等多个领域&#xff0c;特别是结合了计算机专业的特点&#xff0c;注重在项目管理、工程管理、信息系统管理等方面的培养。以下是对计算机专业MEM工程管理硕士主要学习课程的详…

leetcode105. 从前序与中序遍历序列构造二叉树,步骤详解附代码

leetcode105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder…