然而理论上而言,全部看得见的东西都是爬获得的,有道翻译接口也同样。为了祖国将来花朵(咸鱼) 的发展,今天就来给你们介绍一下如何用 Python 超简单快速地调用有道翻译获得翻译结果 。此外,本教程仅供学习哦。前端
若是你懒得看教程,只想要拿到源代码,请关注 Python 实用宝典公众号并回复:“Python 有道接口” 。
PS:不少人在学习Python的过程当中,每每由于遇问题解决不了或者没好的教程从而致使本身放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】须要的能够进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下能够找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一块儿相互监督共同进步python
1. 找到翻译相关接口
打开 fanyi.youdao.com 随便输入一个单词进行翻译,使用开发者工具(空白处右键检查或 F12)查看请求数据。web
能够看到,请求的接口是:\
http://fanyi.youdao.com/translate_o?smartr...django
开发者工具往下拉,查看 Form Data 获得请求的 body 是:json
- i: 你好
- from: AUTO
- to: AUTO
- smartresult: dict
- client: fanyideskweb
- salt: 15707931034929
- sign: 99d0fc48506346afc40e36d5648cc320
- ts: 1570793103492
- bv: ca3dedaa9d15daa003dbdaaa991540d1
- doctype: json
- version: 2.1
- keyfrom: fanyi.web
- action: FY_BY_REALTlME
2. 解析请求 body 内容
显然,以上 body 内容中,i 是须要翻译的文本,from 是原文语言,to 是翻译语言。咱们其余的参数只须要设置为一致的便可。如今须要解决这几个参数:salt, sign, bv,ts.浏览器
ts 从格式上看就知道是时间戳,并且 ts 和 salt 内容很接近,且只差了一位,能够合理猜想,salt 就是 ts+1 位随机数。markdown
接下来就差 sign 和 bv,这两个值看起来很是像 MD5,不过不肯定是什么参数的 MD5,所以须要阅读前端源代码。网络
在 performance 中录制,从新请求接口,找到翻译接口的前端代码 (fanyi.min.js). 而后搜索咱们的关键词 sign 或者 bv. 使用 debug 工具查看值的流动。dom
从这里咱们能够知道,bv 即浏览器头部信息 MD5 的值,个人浏览器头部是这样的: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"ide
实际上在请求接口的时候随便用什么头部都能过这个校验,只要符合标准就行。
最后一个未知参数是 sign. 一样,咱们打开 debug 模式,输入信息,就能够获得其值了。
很显然,sign 由 n.md5 ("fanyideskweb" + e + i + "n% A-rKaT5fb [Gy?;N5@Tj") 组成,而 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 md5
- bv = 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?;N5@Tj")
这样,咱们得到了全部须要用到的参数,集合在一块儿后发送 post 请求。
试一下效果:
- print (translation (' 你好 '))
成功获得接口返回的翻译结果:
- (base) F:\push\20191011>python YouDaoSpider.py
- hello
以上就是本次分享,另外不少人在学习Python的过程当中,每每由于遇问题解决不了或者没好的教程从而致使本身放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】须要的能够进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下能够找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一块儿相互监督共同进步本文的文字及图片来源于网络加上本身的想法,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做删除处理。