Python爬虫实战,破解有道翻译JS加密,制作桌面翻译工具更新版

Posted 楚_阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫实战,破解有道翻译JS加密,制作桌面翻译工具更新版相关的知识,希望对你有一定的参考价值。

前言

最近有小伙伴留言说之前分享的翻译软件用不了了,就是这篇文章里分享的:

利用Python制作一款简单的翻译软件

自己测试了一下,发现百度翻译和Google翻译都还可以用,只有有道翻译报错,于是随手踩点更新了一波代码,顺便在公众号重新分享一波。废话不多说,让我们愉快地开始吧~

开发工具

Python版本:3.6.4
相关模块:

requests模块;

pyqt5模块;

js2py模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

老规矩,先随便翻译几个单词然后抓包看看:

图片

可以发现只要post请求以下这个链接:

http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

就可以返回翻译结果啦,返回的数据结构大概是这样的:

{"translateResult":[[{"tgt":"Pikachu","src":"皮卡丘"}]],"errorCode":0,"type":"zh-CHS2en","smartResult":{"entries":["","Pikachu\\r\\n"],"type":1}}

OK,现在需要解决的问题就是这个post请求需要携带的数据有哪些?如何构造这些数据?显然,在上面贴的抓包结果图已经表明了需要携带的数据有哪些了,即:

--i: 皮卡丘
--from: AUTO
--to: AUTO
--smartresult: dict
--client: fanyideskweb
--salt: 15626748912153
--sign: c6352b577fd346a45fb77efe1afa1e29
--ts: 1562674891215
--bv: 3a019e7d0dda4bcd253903675f2209a5
--doctype: json
--version: 2.1
--keyfrom: fanyi.web
--action: FY_BY_REALTlME

经反复测试,可以发现其中变量为:

i
salt
sign
ts
bv

其余均为不变量,直接复制粘贴就OK了。换句话说,我们只需要解决这五个变量如何构造的问题,就可以完成我们的有道翻译小爬虫了。显然,变量i就是待翻译的词。那么其他四个呢?

简单观察一下,可以发现这些变量可能来自以下这个js文件:

图片

打开搜索一下呗:

图片

看来估计的没错。接着搜索这个js文件看看这些变量都是咋算出来的呗。首先,我找到了这个:

图片

也就是说,ts其实就是时间戳,salt其实就是时间戳加一个0到9之间的随机数。至于sign和bv,只能看出他们是一些字符经过md5加密得到的,打个断点看看这些字符都是啥?

先看appVersion:

图片

再看后面的e:

图片

一目了然。于是,我们轻松地搞清楚了所有需要的变量是怎么来的。因此,现在可以开始愉快地写代码了。具体而言,代码实现如下:

\'\'\'
Function:
  有道翻译类
\'\'\'
class youdao():
    def __init__(self):
        self.headers = {
            \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/70.0.3538.77 Safari/537.36\',
            \'Referer\': \'http://fanyi.youdao.com/\',
            \'Cookie\': \'OUTFOX_SEARCH_USER_ID=-481680322@10.169.0.83;\'
          }
        self.data = {
            \'i\': None,
            \'from\': \'AUTO\',
            \'to\': \'AUTO\',
            \'smartresult\': \'dict\',
            \'client\': \'fanyideskweb\',
            \'salt\': None,
            \'sign\': None,
            \'ts\': None,
            \'bv\': None,
            \'doctype\': \'json\',
            \'version\': \'2.1\',
            \'keyfrom\': \'fanyi.web\',
            \'action\': \'FY_BY_REALTlME\'
          }
        self.url = \'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule\'
    def translate(self, word):
        ts = str(int(time.time()*10000))
        salt = str(int(time.time()*10000)) + str(int(random.random()*10))
        sign = \'fanyideskweb\' + word + salt + \'97_3(jkMYg@T[KZQmqjTK\'
        sign = hashlib.md5(sign.encode(\'utf-8\')).hexdigest()
        bv = \'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36\'
        bv = hashlib.md5(bv.encode(\'utf-8\')).hexdigest()
        self.data[\'i\'] = word
        self.data[\'salt\'] = salt
        self.data[\'sign\'] = sign
        self.data[\'ts\'] = ts
        self.data[\'bv\'] = bv
        res = requests.post(self.url, headers=self.headers, data=self.data)
        return [res.json()[\'translateResult\'][0][0].get(\'tgt\')]

文章到这里就结束了,感谢你的观看,关注我每天分享Python模拟登录系列,下篇文章分享知乎粉丝爬虫。

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

All done~完整源代码+干货详见个人简介或者私信获取相关文件。。

以上是关于Python爬虫实战,破解有道翻译JS加密,制作桌面翻译工具更新版的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫实战之制作桌面翻译工具

有道翻译js逆向更新了

Python爬虫破解有道翻译

Python爬虫破解有道翻译

Python爬虫与Opencv结合,制作一款自己的拍照翻译程序!

Python 爬虫篇 - 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示。爬取西班牙语文章调用有道翻译接口进行整篇翻译