Python反编译调用有道翻译(附完整代码),, 网易有道翻译是一
Python反编译调用有道翻译(附完整代码),, 网易有道翻译是一
网易有道翻译是一款非常优秀的产品,他们的神经网络翻译真的挺无敌。无奈有道客户端实在是太难用了,而且在某些具体场景 (比如对网站进行批量翻译) 无法使用,而有道的云服务又特别的贵,一般人是无法支付得起的。然而理论上而言,所有看得见的东西都是爬得到的,有道翻译接口也一样。为了祖国未来花朵(咸鱼)的发展,今天就来给大家介绍一下如何用Python 超简单快速地调用有道翻译得到翻译结果。此外,本教程仅供学习哦。
如果你懒得看教程,只想要拿到源代码,请关注 Python 实用宝典公众号并回复:“Python 有道接口” 。
PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
1. 找到翻译相关接口
打开fanyi.youdao.com随便输入一个单词进行翻译,使用开发者工具(空白处右键检查或 F12)查看请求数据。
可以看到,请求的接口是:\
http://fanyi.youdao.com/translate_o?smartr...
开发者工具往下拉,查看 Form Data 得到请求的 body 是:
i: 你好from: AUTOto: AUTOsmartresult: dictclient: fanyideskwebsalt: 15707931034929sign: 99d0fc48506346afc40e36d5648cc320ts: 1570793103492bv: ca3dedaa9d15daa003dbdaaa991540d1doctype: jsonversion: 2.1keyfrom: fanyi.webaction: FY_BY_REALTlME2. 解析请求 body 内容
显然,以上 body 内容中,i 是需要翻译的文本,from 是原文语言,to 是翻译语言。我们其他的参数只需要设置为一致的即可。现在需要解决这几个参数:salt, sign, bv,ts.
ts 从格式上看就知道是时间戳,而且 ts 和 salt 内容很接近,且只差了一位,可以合理猜测,salt 就是 ts+1 位随机数。
接下来就差 sign 和 bv,这两个值看起来非常像 MD5,不过不确定是什么参数的 MD5,因此需要阅读前端源代码。
在 performance 中录制,重新请求接口,找到翻译接口的前端代码 (fanyi.min.js). 然后搜索我们的关键词 sign 或者 bv. 使用 debug工具查看值的流动。
从这里我们可以知道,bv即浏览器头部信息 MD5 的值,我的浏览器头部是这样的: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
实际上在请求接口的时候随便用什么头部都能过这个校验,只要符合标准就行。
最后一个未知参数是 sign. 同样,我们打开 debug 模式,输入信息,就可以得到其值了。
很显然,sign 由 n.md5 ("fanyideskweb" + e + i + "n% A-rKaT5fb [Gy?;[email protected]") 组成,而 e 根据 debug 显示的结果,就是我们需要翻译的信息,而 i 就是 salt. 因此 4 个参数我们全部成功反编译!
3. 用 Python 调用接口进行翻译
我们只需要伪造请求的 body,向接口发送 post 请求即可得到翻译结果。比如,ts 是 13 位时间戳,在 Python 中可以使用 time.time ()*1000 获得:
ts = str(int(time.time()*1000))salt 是 ts + 一位随机数,太简单了:
salt = ts + str(random.randint(0, 9))bv 是浏览器 User-Agent,需要进行 MD5 计算,我们新建一个 MD5 函数,将字符串传入函数获得 MD5。
def get_md5(string):string = string.encode(‘utf-8‘)md5 = hashlib.md5(string).hexdigest()return md5bv = get_md5("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")sign 是四个字符串组成后进行 MD5 的结果:
sign = get_md5("fanyideskweb" + context + salt + "n%A-rKaT5fb[Gy?;[email protected]")这样,我们获得了所有需要用到的参数,集合在一起后发送 post 请求。
试一下效果:
print (translation (‘ 你好 ‘))成功得到接口返回的翻译结果:
(base) F:\push\20191011>python YouDaoSpider.pyhello以上就是本次分享,另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作删除处理。
Python反编译调用有道翻译(附完整代码)
相关内容
- 【Flask项目】 python学习经典报错,,报错: Unboun
- python搭建后台服务,,后端# coding
- 2020学习 04 python 爬取某政府网站信件,,直接上代码⑧:
- python数据统计量分析,,#-*- codin
- Python之zlib模块的使用,,zlib模块作用:
- python调用golang编写的动态链接库,,楔子我们都知道py
- Python之路【第一篇】:Python入门,,Python入门一、
- Python语言学习:模块,,一、模块1. 模块(
- CentOS7 安装 Python3.8后 pip 安装报错,,[[email pr
- 人工智能和Python是什么关系?,,提及到人工智能很多人
评论关闭