【Python爬虫】有道翻译新旧API接口

🌈据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:Python爬虫 ,一个专注于分享爬虫技巧与案例的专栏~

想看往期历史文章,可以浏览此博文: 历史文章目录,后续所有文章发布都会同步更新此博文~

人生苦短,我用python

前言

自从谷歌翻译用不了之后,一直都在探索其他可用翻译,今天就轮到了我们的 有道翻译。首先来总起评价这个网页的爬虫难度:简单(自从刷了猿人学,这种在我眼中只能被归类为简单了)。

旧API接口

在此之前我也是爬过 有道翻译 的,不过以前是压根没有加密,直接请求就能得到数据,在此放出来:

import requests


def translate_old(text):
    url = 'http://fanyi.youdao.com/translate'
    params = {
   
        'i': text,
        'doctype': 'json'
    }
    return requests.get(url, params=params).json()


print(translate_old('翻译'))

就拿这个例子执行一下,他返回了:
{'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 1, 'translateResult': [[{'src': '翻译', 'tgt': 'translation'}]]}
,现在来对比一下新的API接口的返回:
{'code': 0, 'dictResult': {'ce': {'word': {'trs': [{'voice': 'translate&type=2', '#text': 'translate', '#tran': '译,翻译;(使)转变,(使)变化;意同,相当于,(把……)解释为;(以易于理解的方式)解释,说明;导致,造成;改编,改写;转换(计算机程序或语言所含的信息);(生)转译(信使RNA中的一组核苷酸);转移,调动,转变;<正式>调换(主教,苏格兰牧师)的教区;<正式>移葬(圣徒遗骸);<文>送(人,尤指活人)进天堂;(物理)平移(主干部分);(数)平移(几何图形);'}, {'voice': 'interpret&type=2', '#text': 'interpret', '#tran': '解释,说明;口译;把……理解为;演绎;'}], 'phone': 'fān yì', 'return-phrase': '翻译'}}}, 'translateResult': [[{'tgt': 'translation', 'src': '翻译', 'srcPronounce': 'fānyì'}]], 'type': 'zh-CHS2en'}
,可见新API的返回相当给力,不管用不用的上,都给你了。
看到别人用着这个,一下子就激发了我征服它的欲望,于是我们开始来爬新API接口吧~

新API接口

打开网页和开发者选项,映入眼帘的是仅仅两个需要攻克的加密部分:
在这里插入图片描述
对比了一下,这个 mysticTime 是请求的时间戳,同步变化的是 sign ,如果此时你 hook 时间:
在这里插入图片描述
然后随便找两个例子翻译一下:
在这里插入图片描述
在这里插入图片描述
你会发现 sign 的值纹丝不动!所以这个 sign 是由时间戳生成无疑了,当然代码也很好找:
在这里插入图片描述
有点多,没事,加个冒号:
在这里插入图片描述
瞬间少了一堆,我们一个个点进去,发现运气真好,第一个就是:
在这里插入图片描述
右击来源中打开,找到这个 sign 打个断点,随便翻译一个就进来了:
在这里插入图片描述
甚至发现他调用的函数就在上方,这是不是太简单了,看不起我呢?
看了一眼 r.a ,默默的获取了它的值:
在这里插入图片描述
这不真巧,用的方法就是 Node 模块 crypto 中的函数:
在这里插入图片描述
同一个 sign 值!简简单单So easy!
然后来看看他的返回值:
在这里插入图片描述
发现他是一长串的加密值,本以为要花一番功夫,然后我瞟了一眼控制台:
在这里插入图片描述
直接把解密入口打印在了控制台!这是得多猖狂才能干的出来,仿佛在跟我说:你过来啊~
都这样了我们怎么也得盘一下它,从控制台点进去:
在这里插入图片描述
打上断点重新给翻译然后点进函数:
在这里插入图片描述
原来仅仅是一段 AES 加密啊,看看他的明文密钥是不是动态的。
刷新几次后,发现他的明文和密文都是固定写死的,也不管他以后会不会变,现在只想 CV 下来。
Node 执行一下:
在这里插入图片描述
成功解密,很好,整个翻译API的解密流程就完毕了,对于整个过程,我几乎只有一个动作:CV (手动滑稽~)
之前在处理 execjs 出现 gbk 编码异常时候看到了,每次请求都会新建一个 os.Popen ,而这个是子进程,会比较耗时,所以我们最终的目标,是用纯Python实现它!

新API接口调用的两段JavaScript

先贴上刚才所使用的两段JavaScript代码。
第一段,生成 sign 参数:

const crypto = require('crypto'
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值