某狗翻译官网:

搜狗翻译 - 我的贴身智能翻译专家搜狗翻译可支持中、英、法、日等50多种语言之间的互译功能,为您即时免费提供字词、短语、文本翻译服务。https://fanyi.sogou.com/text输入:椅子 ,得到:

请求荷载

多次对比可知:

from,s,text,to是必要的变化参数

from(输入语种),text(输入),to(输出语种)就不必多说了,下面浅讲一下s是怎么来的,与如何使用Python得到它。

打开源代码,找到s生成的位置 (漫长~~),可以按Ctrl+Shift+F调出搜索功能,全局搜索's',也可以在所有的js文件中Ctrl+F搜索's'。

's'生成位置:top/search.sougoucdn.com/translate//pc//static/js/app.9b744a4e.js美观化后的第2962行 稍微往上看一下(2951行)会发现s就是 K.a.cal("".concat(p).concat(m).concat(l).concat(O))。

有一个Python第三方库叫execjs可以运行javascript脚本,牢记缺啥补啥大法 利用断点调试 将每一个需要的 函数 都复制到本地的一个(*.js)文件里。

嗯呐~~

感觉字数差不多了呐,直接上代码吧

本地的文件的结构差不多长这样:

Cookie.txt里装的是您登陆后的Cookie

JSON.js(名字瞎取的,js跟json没半毛钱关系)内容如下:

function rotl(t, n) {return t << n | t >>> 32 - n
}function crypt_endian(t){if (t.constructor == Number)return 16711935 & rotl(t, 8) | 4278255360 & rotl(t, 24);for (let n = 0; n < t.length; n++)t[n] = crypt_endian(t[n]);return t}function _ff(t, n, r, e, o, i, u) {const a = t + (n & r | ~n & e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n
}
function _gg(t, n, r, e, o, i, u) {const a = t + (n & e | r & ~e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n
}
function _hh(t, n, r, e, o, i, u) {const a = t + (n ^ r ^ e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n
}
function _ii(t, n, r, e, o, i, u) {const a = t + (r ^ (n | ~e)) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n
}function crypt_bytesToWords(t) {for (var n = [], r = 0, e = 0; r < t.length; r++,e += 8)n[e >>> 5] |= t[r] << 24 - e % 32;return n
}function isBuffer(t){return null != t && (r(t) || function(t) {return "function" == typeof t.readFloatLE && "function" == typeof t.slice && r(t.slice(0, 0))}(t) || !!t._isBuffer)
}function utf8_stringToBytes(t){return bin_stringToBytes(unescape(encodeURIComponent(t)))
}function bin_stringToBytes(t){for (var n = [], r = 0; r < t.length; r++)n.push(255 & t.charCodeAt(r));return n
}function crypt_wordsToBytes(t){for (var n = []  , r = 0; r < 32 * t.length; r += 8)n.push(t[r >>> 5] >>> 24 - r % 32 & 255);return n
}function md5(t ,n){t.constructor == String ? t = n && "binary" === n.encoding ? bin_stringToBytes(t) : utf8_stringToBytes(t) : isBuffer(t) ? t = Array.prototype.slice.call(t  , 0) : Array.isArray(t) || (t = t.toString());const r = crypt_bytesToWords(t), e = 8 * t.length;let o = 1732584193, i = -271733879, u = -1732584194, a = 271733878;for (var c = 0; c < r.length; c++)
r[c] = 16711935 & (r[c] << 8 | r[c] >>> 24) | 4278255360 & (r[c] << 24 | r[c] >>> 8);r[e >>> 5] |= 128 << e % 32  ,r[14 + (e + 64 >>> 9 << 4)] = e;const f = _ff, s = _gg, l = _hh, h = _ii;for (c = 0; c < r.length; c += 16) {const t = o, n = i, e = u, p = a;o = f(o  , i  , u  , a  , r[c + 0]  , 7  , -680876936)  ,a = f(a  , o  , i  , u  , r[c + 1]  , 12  , -389564586)  ,u = f(u  , a  , o  , i  , r[c + 2]  , 17  , 606105819)  ,i = f(i  , u  , a  , o  , r[c + 3]  , 22  , -1044525330)  ,o = f(o  , i  , u  , a  , r[c + 4]  , 7  , -176418897)  ,a = f(a  , o  , i  , u  , r[c + 5]  , 12  , 1200080426)  ,u = f(u  , a  , o  , i  , r[c + 6]  , 17  , -1473231341)  ,i = f(i  , u  , a  , o  , r[c + 7]  , 22  , -45705983)  ,o = f(o  , i  , u  , a  , r[c + 8]  , 7  , 1770035416)  ,a = f(a  , o  , i  , u  , r[c + 9]  , 12  , -1958414417)  ,u = f(u  , a  , o  , i  , r[c + 10]  , 17  , -42063)  ,i = f(i  , u  , a  , o  , r[c + 11]  , 22  , -1990404162)  ,o = f(o  , i  , u  , a  , r[c + 12]  , 7  , 1804603682)  ,a = f(a  , o  , i  , u  , r[c + 13]  , 12  , -40341101)  ,u = f(u  , a  , o  , i  , r[c + 14]  , 17  , -1502002290)  ,i = f(i  , u  , a  , o  , r[c + 15]  , 22  , 1236535329)  ,o = s(o  , i  , u  , a  , r[c + 1]  , 5  , -165796510)  ,a = s(a  , o  , i  , u  , r[c + 6]  , 9  , -1069501632)  ,u = s(u  , a  , o  , i  , r[c + 11]  , 14  , 643717713)  ,i = s(i  , u  , a  , o  , r[c + 0]  , 20  , -373897302)  ,o = s(o  , i  , u  , a  , r[c + 5]  , 5  , -701558691)  ,a = s(a  , o  , i  , u  , r[c + 10]  , 9  , 38016083)  ,u = s(u  , a  , o  , i  , r[c + 15]  , 14  , -660478335)  ,i = s(i  , u  , a  , o  , r[c + 4]  , 20  , -405537848)  ,o = s(o  , i  , u  , a  , r[c + 9]  , 5  , 568446438)  ,a = s(a  , o  , i  , u  , r[c + 14]  , 9  , -1019803690)  ,u = s(u  , a  , o  , i  , r[c + 3]  , 14  , -187363961)  ,i = s(i  , u  , a  , o  , r[c + 8]  , 20  , 1163531501)  ,o = s(o  , i  , u  , a  , r[c + 13]  , 5  , -1444681467)  ,a = s(a  , o  , i  , u  , r[c + 2]  , 9  , -51403784)  ,u = s(u  , a  , o  , i  , r[c + 7]  , 14  , 1735328473)  ,i = s(i  , u  , a  , o  , r[c + 12]  , 20  , -1926607734)  ,o = l(o  , i  , u  , a  , r[c + 5]  , 4  , -378558)  ,a = l(a  , o  , i  , u  , r[c + 8]  , 11  , -2022574463)  ,u = l(u  , a  , o  , i  , r[c + 11]  , 16  , 1839030562)  ,i = l(i  , u  , a  , o  , r[c + 14]  , 23  , -35309556)  ,o = l(o  , i  , u  , a  , r[c + 1]  , 4  , -1530992060)  ,a = l(a  , o  , i  , u  , r[c + 4]  , 11  , 1272893353)  ,u = l(u  , a  , o  , i  , r[c + 7]  , 16  , -155497632)  ,i = l(i  , u  , a  , o  , r[c + 10]  , 23  , -1094730640)  ,o = l(o  , i  , u  , a  , r[c + 13]  , 4  , 681279174)  ,a = l(a  , o  , i  , u  , r[c + 0]  , 11  , -358537222)  ,u = l(u  , a  , o  , i  , r[c + 3]  , 16  , -722521979)  ,i = l(i  , u  , a  , o  , r[c + 6]  , 23  , 76029189)  ,o = l(o  , i  , u  , a  , r[c + 9]  , 4  , -640364487)  ,a = l(a  , o  , i  , u  , r[c + 12]  , 11  , -421815835)  ,u = l(u  , a  , o  , i  , r[c + 15]  , 16  , 530742520)  ,i = l(i  , u  , a  , o  , r[c + 2]  , 23  , -995338651)  ,o = h(o  , i  , u  , a  , r[c + 0]  , 6  , -198630844)  ,a = h(a  , o  , i  , u  , r[c + 7]  , 10  , 1126891415)  ,u = h(u  , a  , o  , i  , r[c + 14]  , 15  , -1416354905)  ,i = h(i  , u  , a  , o  , r[c + 5]  , 21  , -57434055)  ,o = h(o  , i  , u  , a  , r[c + 12]  , 6  , 1700485571)  ,a = h(a  , o  , i  , u  , r[c + 3]  , 10  , -1894986606)  ,u = h(u  , a  , o  , i  , r[c + 10]  , 15  , -1051523)  ,i = h(i  , u  , a  , o  , r[c + 1]  , 21  , -2054922799)  ,o = h(o  , i  , u  , a  , r[c + 8]  , 6  , 1873313359)  ,a = h(a  , o  , i  , u  , r[c + 15]  , 10  , -30611744)  ,u = h(u  , a  , o  , i  , r[c + 6]  , 15  , -1560198380)  ,i = h(i  , u  , a  , o  , r[c + 13]  , 21  , 1309151649)  ,o = h(o  , i  , u  , a  , r[c + 4]  , 6  , -145523070)  ,a = h(a  , o  , i  , u  , r[c + 11]  , 10  , -1120210379)  ,u = h(u  , a  , o  , i  , r[c + 2]  , 15  , 718787259)  ,i = h(i  , u  , a  , o  , r[c + 9]  , 21  , -343485551)  ,o = o + t >>> 0  ,i = i + n >>> 0  ,u = u + e >>> 0  ,a = a + p >>> 0}return crypt_endian([o  , i  , u  , a])
}function crypt_bytesToHex(t) {for (var n = []  , r = 0; r < t.length; r++)n.push((t[r] >>> 4).toString(16))  ,n.push((15 & t[r]).toString(16));return n.join("")
}function cal(t  , n){if (null == t)throw new Error(`Illegal argument ${t}`);const r = crypt_wordsToBytes(md5(t  , n));return n && n.asBytes ? r : n && n.asString ? bin_bytesToString(r) : crypt_bytesToHex(r)
}

Sougou_Translate_API.py内容如下:(25行与52行需要补充哦)

import requests;import execjs;import jsonclass Sougou_Translate_API():def __init__(self, word, _from_, _to_):'''zh-CHS(汉语),   en(英语),     ar(阿拉伯语),pl(波兰语),    da(丹麦语),     de(德语),ru(俄语),      fr(法语),      fi(芬兰语),ko(韩语),     nl(荷兰语),     cs(捷克语),pt(葡萄牙语),   ja(日语),      sv(瑞典语),th(泰语),     tr(土耳其语),    es(西班牙语),hu(匈牙利语), it(意大利语),   vi(越南语)'''self.word   = wordself._from_ = _from_self._to_   = _to_self.url = 'https://fanyi.sogou.com/api/transpc/text/result'self.Cookie = self.get_Cookie()self.headers = {'Content-Type': 'application/json;charset=UTF-8','Cookie': self.Cookie,'User-Agent': '您的User-Agent'}self.s = self.get_s()self.uuid = 'a9d37792-8b7b-4428-be78-929f4d67f23f'#没有啥特别影响的参数直接找一个就行self.data = {"from":_from_,"to":_to_,"text":self.word,"client":"pc","fr":"browser_pc","needQc":1,"s":self.s,"uuid":self.uuid,"exchange": 'true'#也可以是'false'}r = requests.post(url=self.url, data=json.dumps(self.data), headers=self.headers)self.response = r.json()def get_Cookie(self):with open('Cookie.txt', 'r') as f:Cookie = f.read()return Cookiedef get_s(self):t = self._from_+self._to_+self.word+"您的秘密代码"#断一下点,自己去找with open('JSON.js', encoding='utf-8') as f:js =f.read()ctx = execjs.compile(js)result = ctx.call('cal',t)#调用JSON.js里的cal函数return resultdef result(self):#翻译结果return self.response['data']['translate']['dit']def film_example(self):#影视原声book = self.response['data']['book']if bool(book):return Noneelse:return bookdef bilingual_example(self):#双语例句know = self.response['data']['detail']if bool(know):return Noneelse:if 'bilingual' in know:return know["bilingual"]        def entry(self):#百科知识know = self.response['data']['detail']if bool(know):return Noneelse:if 'baike' in know:return know["baike"]["list"]def word_group(self):#词组know = self.response['data']['detail']if bool(know):return Noneelse:if 'word_group' in know:wg = know["word_group"]ret = []for i in wg:ret.append([i["brief_definition"],i["phrase"]])return retdef slef_info(self):#输入文本的信息return {"detect":self.response["data"]["detect"]["detect"],"language":self.response["data"]["detect"]["language"]}def voice(self):#输入文本的读音return self.response["data"]["voice"]

---------------------------------------------------------------------------------------------------------------------------------

2022/11/5更新几个要点:

1.在使用execjs时,环境必须是Node.js(U8),可以通过这样做把默认JSscript环境设置成Node.js(U8):

CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=node/

现在上面的链接中的文件夹中找到适合自己的版本(我的电脑是Windows7(64位),下面是我的方法)

点击红箭头指的那个

打勾的是可以选的(位数不同,因人而异),我则是点击箭头所指的压缩包(7z比zip压缩的更小,内容一样哒),下载好后,把这个压缩包移到OK的地方解压(D://),最后设置Path

上图波浪线画出的Path十分珍贵,所以必要的话可以复制备份

在原Path后小心的加上一个分号‘;’,然后加上node文件夹的地址(上上图),最后一次确定即可。

下面测试一下:

>>>import execjs
>>>execjs.get().name
'Node.JS(U8)'
>>>print('OK啦!')
OK啦!

本文仅供学习参考使用!!!

完!

喜欢就请您点个赞!

喂!点赞啊!你看见我了吗?

基于爬虫制作的Python翻译程序相关推荐

  1. python基于爬虫技术的海量电影数据分析源码,数据处理分析可视化,GUI界面展示

    基于爬虫技术的海量电影数据分析 介绍 一个基于爬虫技术的海量电影数据分析系统 系统架构 本系统主要分为四个部分,分别为后端爬虫抓取.数据处理分析可视化.GUI界面展示.启动运行,分别对应getData ...

  2. 因为难看的签名尴尬?Python爬虫制作艺术签名软件!

    前言 不管你是在校大学生,已经踏入社会的白领阶层,还是在商界赫赫有名的老总,总会时不时的会要求签名,您还在为你那难看的签名而尴尬吗?从现在起不必了,因为有了这篇文章,在这里有艺术家亲笔为您专门设计的艺 ...

  3. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  4. python新闻爬虫系统的功能_基于Scrapy框架的Python新闻爬虫

    一.开发背景 Python作为数据处理方面的一把好手,近年来的热度不断增长.网络爬虫可以说是Python最具代表性的应用之一,那么通过网络爬虫来学习Python以及网络和数据处理的相关内容可以说是再合 ...

  5. Python爬虫:制作一个属于自己的IP代理模块

    Python爬虫:制作一个属于自己的IP代理模块 Python爬虫常常会面临自己ip地址被封的情况,也许不懂的读者就只能等ip解封之后再进行接下来的操作了,为什么自己不做一个Python模块专门用于处 ...

  6. Python爬虫:制作一个属于自己的IP代理模块2

    Python爬虫:制作一个属于自己的IP代理模块2 小编前些日子写了一篇关于IP代理模块的博客(Python爬虫:制作一个属于自己的IP代理模块 ),但是那个还需要改进,今天小编改进了一下那个模块,爬 ...

  7. python 报价程序_【python】简单爬虫制作(汽车之家易车网报价爬虫)

    首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市.十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作.我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种st ...

  8. 【python】简单爬虫制作(汽车之家易车网报价爬虫)

    首先交代背景,逗逼女朋友每个月要花费半天多的时间去汽车网上找三十多个城市.十多款车型的报价数据,而且他们部门其它人也要做这种繁琐的工作.我在网络卡屎的情况下帮她做了一回,我就打死都想写个程序把这种st ...

  9. python爬取小说章节信息用pygame进行数据显示_爬虫不过如此(python的Re 、Requests、BeautifulSoup 详细篇)...

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取 ...

  10. 基于爬虫+人脸识别库实现指定人物自动采集

    基于爬虫+人脸识别库实现指定人物自动采集 项目目的,为后面基于GAN的换脸大法做准备 更新 无需多张照片只需要一张原照就可以了 前言 如今大数据时代下的深度学习发展的火热,但是总是发现找不到合适的自己 ...

最新文章

  1. 撕裂者cpu三代文件服务器,AMD三代线程撕裂者CPU开盖:钎焊散热、64核若隐若现...
  2. UIButton的重复点击
  3. Android WebView 性能优化
  4. python ConfigParser 小试
  5. CentOS 7安装Zabbix 3.4
  6. 斐波那契数列 C++ 实现代码
  7. myeclipse 添加mysql数据库_myeclipse添加数据库
  8. VisualVM提示检测不到本地JAVA程序
  9. odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)
  10. java设计平台是什么_Java程序设计平台
  11. max_workers解释
  12. Urllib库的基本使用
  13. 龙卷风路径_关于龙卷风,看这篇文章就够了
  14. java 龟兔赛跑预测_Java实现 蓝桥杯VIP 基础练习 龟兔赛跑预测
  15. ROS使用yocs_smoother_velocity做速度平滑处理
  16. Editplus下载安装
  17. 2015人大计算机复试线,清华、北大、人大、公布2015年考研复试线
  18. (转)学习linux的几本书
  19. 我现在是读的中专,读书的意义是什么?
  20. 基于python爬虫基础教学(豆瓣,猫眼,3DM)

热门文章

  1. [转]Excel插件开发基础知识
  2. matlab2010激活问题
  3. VTK:图像平滑——高斯滤波器
  4. 国药准字、药品本位码
  5. java docx4j 使用教程_docx4j深入学习整理
  6. 数学建模相关知识梳理
  7. python 串口接收多线程与界面通信_Python之PyQT多线程串口代码分析
  8. 基于FPGA的四轴运动控制IC设计(verilog)
  9. oracle卸载步骤图解,Oracle详细卸载步骤
  10. 《硬件接入》海康威视接入及CPU性能优化思路