Python系列爬虫之有道翻译小爬虫【更新】

Python系列爬虫之有道翻译小爬虫【更新】,第1张

概述前言最近有小伙伴留言说之前分享的翻译软件用不了了,就是这篇文章里分享的:利用Python制作一款简单的翻译软件自己测试了一下,发现百度翻译和Google翻译都还可以用,只有有道翻译报错,于是随手踩点更新了一波代码,顺便在公众号重新分享一波。废话不多说,让我们愉快地开始吧~开发 前言

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

利用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

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

isaltsigntsbv

其余均为不变量,直接复制粘贴就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': '[email protected];'          }        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编程的伙伴们,在这里为大家准备了丰富的学习大礼包

All done~完整源代码详见个人简介相关文件。

总结

以上是内存溢出为你收集整理的Python系列爬虫之有道翻译小爬虫【更新】全部内容,希望文章能够帮你解决Python系列爬虫之有道翻译小爬虫【更新】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存