英语翻译太难?我一怒之下写了两个翻译脚本

简介: 它来了!它来了!作为一名程序员,英语句子不会翻译,这我不能忍,必须安排脚本!!!

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛😜
  • 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥

前言

它来了!它来了!作为一名程序员,英语句子不会翻译,这我不能忍,必须安排脚本!!!

百度翻译版本(简单)

分析

进入百度翻译,F12进入网络中的全部,在你写你要翻译的东西时,在网络中的全部中可以看到sug这个链接,就是我们的接口url,参数是kw。
请添加图片描述
请添加图片描述

代码

import requests
post_url='https://fanyi.baidu.com/sug'
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
word = input('请输入你要翻译的,可以为各种语言:')
data = {
    'kw': word
}
response = requests.post(url=post_url,data=data,headers=headers)
dic_obj = response.json() #将json数据转换为字典
print(dic_obj['data'][0]['v'])

结果

在这里插入图片描述
在这里插入图片描述

有道翻译版本(困难)

分析(js逆向)

F12进入到开发者模式,在网络中的xhr(找ajax请求的地方)中找到下图接口。
在这里插入图片描述
然后我们看参数:
在这里插入图片描述
在这里插入图片描述
两张图比较得出,i 应该就是我们要翻译的句子,画绿线的是不相同表单的参数,需要我们处理,Its一看就是13位的时间戳,salt英文意思是盐,且比时间戳lts多一位,前面十三位都一样,应该是个加盐时间戳(对于某串数字可以进行加一串数字或字符串再进行加密,在加密中我们叫加盐),这两个参数我们完全可以用python单独模拟,为了避免不必要的麻烦或者有些人不会,我们后面直接找到他们的js语句,用python执行js生成就行。

而这里的sign一看有32位,应该是某种加密算法产生的,最常见的就是md5和rsa加密了,下面我们进行全局搜索js逆向:
在这里插入图片描述
在这里插入图片描述
经过搜索,我们发现了老盆友md5加密,也找到了参数的生成方式,图中js里的r就是时间戳,js里的i就是加盐时间戳,sign是用md5加密的括号里的字符串,还要分析e的产生,可以通过打断点调试找出。
在这里插入图片描述
可以看到e就是我们要翻译的东西,现在参数都明显了,我们最简单的其实调用python中的hashlib模块中的md5加密算法就可以得到sign,但这里我们不用,加大难度,练习js逆向。我把直接提取到的md5加密过程的js文件放到网盘里,大家自己提取,代码中要用。

链接:https://pan.baidu.com/s/1aV1tEo35Oyw4TUExhJoXUA
提取码:waan

同时,为了应对反爬,不仅要加User-Agent,还要加Cookie和Referer。

代码

import requests
import execjs  #执行js语句的模块
import json
import jsonpath

class Youdao():
    def __init__(self,msg):
        # url
        self.url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        # headers
        self.headers = {
            'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 91.0.4472.124Safari / 537.',
            'Cookie': 'OUTFOX_SEARCH_USER_ID = -1032338096@10.169.0.102;OUTFOX_SEARCH_USER_ID_NCOO = 39238000.072458096;JSESSIONID = aaak-QLUNaabh_wFWK8Qx;___rl__test__cookies = 1626662199192',
            'Referer': 'https://fanyi.youdao.com/'
        }
        self.msg = msg
        self.Formdata = None

    def js_Formdata(self):
        #时间戳
        r = execjs.eval('"" + (new Date).getTime()')
        #时间戳加盐
        i = r + str(execjs.eval('parseInt(10 * Math.random(), 10)'))
        ctx = execjs.compile(open('./youdao.js', 'r', encoding='utf-8').read())
        sign = ctx.call('getsign', self.msg,i)  #调用youdao.js里的getsign函数,将要翻译的东西和加盐时间戳传进去。
        self.Formdata = {
            'i': self.msg,
            'from': 'AUTO',
            'to': 'AUTO',
            'smartresult': 'dict',
            'client': 'fanyideskweb',
            'salt': i,
            'sign': sign,
            'lts': r,
            'bv': 'f46e446c6db49492797b7d03ea1e82da',
            'doctype': 'json',
            'version': '2.1',
            'keyfrom': 'fanyi.web',
            'action': 'FY_BY_REALTlME',
        }

    def response(self):
        resp = requests.post(url=self.url,data=self.Formdata,headers=self.headers).text
        data = json.loads(resp)  #将json数据转换成字典

        #利用jsonpath提取数据
        if "translateResult" in data:
            k = jsonpath.jsonpath(data, '$..translateResult')[0][0][0]['tgt']
            print(k)

        print("其他翻译:")
        if "smartResult" in data:
            lst = jsonpath.jsonpath(data, '$..entries')[0]
            for k in lst[1:]:
                k = k.replace("\r\n", "")
                print(k)

    def main(self):
        #Formdata
        self.js_Formdata()
        #print(self.Formdata)
        #发送请求,获取响应
        self.response()

if __name__ == '__main__':
    msg = input('请输入你要翻译的词或句子:')
    youdao = Youdao(msg)
    youdao.main()

结果

在这里插入图片描述
在这里插入图片描述

结语

觉得博主写的不错的话给个三连哦!!!💖💖💖

相关文章
|
2月前
|
SQL 人工智能 自然语言处理
数据驱动的下一站:AI Agent实现洞察与行动的自动闭环​
2025年,AI Agent正推动商业智能从“被动查询”迈向“主动决策”。本文系统解析AI Agent核心技术、应用场景与实施路径,助力企业构建以语义层为核心的智能分析体系,实现从数据洞察到自动行动的闭环,全面提升决策效率与数据ROI。
632 11
|
6月前
|
定位技术 开发者
HarmonyOS实战:高德地图自定义定位图标展示
本文详细介绍了在鸿蒙系统中实现地图定位功能的开发流程与注意事项。首先,开发者需要申请两个必要的定位权限,并确保用户手动开启系统设置中的位置权限。接着,通过高德定位获取用户位置信息,并使用自定义图标替代默认的定位箭头。文章特别强调了经纬度数据必须为float类型,否则可能导致定位不准确。此外,还需检查系统的GPS定位按钮是否开启,以确保定位功能正常使用。通过本文的指导,开发者可以避免常见的定位问题,顺利完成地图定位功能的开发。
253 2
HarmonyOS实战:高德地图自定义定位图标展示
|
小程序 JavaScript 开发者
微信小程序构建npm
微信小程序构建npm
802 4
|
人工智能 自然语言处理 搜索推荐
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
在人工智能的浪潮中,大型语言模型(LLM)无疑是最引人注目的潮头。在支撑这些大型语言模型应用落地方面,文本向量化模型(Embedding Model)的重要性也不言而喻。 近期,我在浏览huggingface发现,国产自研文本向量化模型acge_text_embedding(以下简称“acge模型”)已经在业界权威的中文语义向量评测基准C-MTEB(Chinese Massive Text Embedding Benchmark)中获得了第一名。
文本向量化模型新突破——acge_text_embedding勇夺C-MTEB榜首
|
小程序 前端开发 Java
微信小程序|Springboot+Vue+Node开发实现医疗预约挂号系统(一)
微信小程序|Springboot+Vue+Node开发实现医疗预约挂号系统
296 1
|
Linux TensorFlow 算法框架/工具
windows编译TensorFlowServing
windows编译TensorFlowServing
274 1
|
并行计算 Java 编译器
还在用线程池,这款虚拟线程,让你性能倍增
还在用线程池,这款虚拟线程,让你性能倍增
2337 1
|
机器学习/深度学习 计算机视觉 Python
python目标识别及实例分割代码(可以套用自己的数据)
python目标识别及实例分割代码(可以套用自己的数据)
|
安全 编译器 C语言
Dev-C++5.11安装教程
Dev-C++5.11安装教程
951 0
Dev-C++5.11安装教程
|
Linux
LINUX打印机报错:ipp error(1034, client-error-document-format-not-supported)
LINUX打印机报错:ipp error(1034, client-error-document-format-not-supported)
4609 0
LINUX打印机报错:ipp error(1034, client-error-document-format-not-supported)