欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

爬虫 Python爬取有道翻译

程序员文章站 2022-06-17 16:06:03
Hello,大家好,这里是超级勤奋的小泽亲~因为不会用目录所以直接不用目录…那么今天要干什么呢?标题不都说了嘛,进攻,有道翻译!虽然说我们昨天已经试图进攻过有道翻译了,而且也貌似实现了效果,但是那只是一种错觉,其实昨天可以借鉴的主要是思路,总体来说是比较不合格的,鉴于让大家都能学会的原则呢,今天要再一次向有道翻译发起进攻!首先,打开我们的有道翻译:神奇的传送门在当前页面呢,按下F12,或者右键,然后找到检查或者开发者工具,这里用谷歌浏览器或者360极速浏览器都是可以的哈。然后打开我们的N...

Hello,大家好,这里是超级勤奋的小泽亲~
爬虫 Python爬取有道翻译

因为不会用目录所以直接不用目录…

那么今天要干什么呢?

标题不都说了嘛,进攻,有道翻译!

虽然说我们昨天已经试图进攻过有道翻译了,而且也貌似实现了效果,但是那只是一种错觉,其实昨天可以借鉴的主要是思路,总体来说是比较不合格的,鉴于让大家都能学会的原则呢,今天要再一次向有道翻译发起进攻!

首先,打开我们的有道翻译:

神奇的传送门

爬虫 Python爬取有道翻译
在当前页面呢,按下F12,或者右键,然后找到检查或者开发者工具,这里用谷歌浏览器或者360极速浏览器都是可以的哈。

然后打开我们的Network界面:

爬虫 Python爬取有道翻译
可以看到我们的Network界面里面是有一条信息的,当然如果你的没有也不打紧,点击红点点旁边的按钮,全部清空空一个都不留。

爬虫 Python爬取有道翻译
然后不要关掉这个窗口,也不要刷新页面,直接翻译一个词。

爬虫 Python爬取有道翻译
好的,蹦出来了很多信息,不要慌,让我们一起摸着前进!

爬虫 Python爬取有道翻译
这里让我们点开XHR界面,为什么要点开这里呢?

这样想,我们翻译的话,肯定要给服务器发送请求的吧,既然发送了请求,就会收到数据吧,不管是要的数据还是警告我们的数据,都要返回一个东西吧,所以呢这个东西就可以理解为动态的,就是我们需要跟服务器进行一个“交流”,所以就要在这个XHR里面找我们向服务器发送的请求,如果还是觉得很晕听不懂,说明你有在认真思考这个问题,说明你是真的…爱学习!

但是呢,有的时候也不要太过分追究到底是为什么,要知道,知道的太多,就会被灭口的!

爬虫 Python爬取有道翻译

打开这个XHR后,世界顿时清净了~

随便点开一个看看,因为都是一样的嘛:

爬虫 Python爬取有道翻译
看到没,红框框的都是我们要注意的,第一个红框框里面就是我们要的url,这里先记录一下:我们这次的url是:

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

要养成一边摸索一边记录的好习惯呦(╹▽╹)

然后就是我们这次请求呢,是POST请求,还有就是返回的数据是json数据。

好啦,继续往下滚:

爬虫 Python爬取有道翻译
可以看到有一个Referer,这里呢,我们要把它写到headers这个字典里,跟着headers一起发送到服务器那边,以前没有管,但是以后看到要记得加进去哦,至于怎么加进去,先别急嘛,让我说完先~

还有Cookie,为了以防万一,我们也一起带上!

也就是说我们的headers要改成:

headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=2006217193@10.108.160.18; OUTFOX_SEARCH_USER_ID_NCOO=302812442.2493042; JSESSIONID=aaadiUSBQLdhe5_m5Rvzx; ___rl__test__cookies=1607756476599',
    'Referer': 'http://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}

听懂掌声!

hhh,可以看到,这个headers里面不仅有我们以前经常用到的User-Agent,还有Cookie和Referer,当然如果你打上去报错的话,注意看一下是不是没有用逗号分隔。

这个headers是可以变得哦,我们起成a也可以的,用headers主要是方便我们对号入座,用的多了也会自然而然的记住这个单词,麻麻再也不用担心我过不了四六级啦~

爬虫 Python爬取有道翻译
再往下翻,可以看到我们的Data一家,不要犹豫,全部拷走!

data = {
    'i': '点赞',
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '16077564766152',
    'sign': '63a299cbcbb39c939542215f811da390',
    'lts': '1607756476615',
    'bv': '79d103f0086f0e2586344a7cd1b549d7',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME'
}

这里小泽已经给各位小懒猪整理好了一个data字典,然后让我们开始分析吧!

 'i': '点赞'   #可以明显的看出来,这个i指的就是我们要翻译的单词,所以不用管它。
  #from就是指的我们输入的词的语种,语种是语言的意思哦,比如点赞就是中文,也就是zh
 'from': 'AUTO'
  #to就是指的我们要翻译的语种,英语应该是en,AUTO是自动的意思哦。
 'to': 'AUTO'
  #这两个就是写死了,不用动的东西,至于为什么呢…
  #你多翻译几次多看看这些参数的变化就知道了
 'smartresult': 'dict'
 'client': 'fanyideskweb'
 'salt': '16077564766152'   #这个就是时间戳乘以1000然后再取整然后再加一个随机数嘛

嗯?

什么是时间戳?

爬虫 Python爬取有道翻译
在python里面就是:

a = time.time()
print('time.time()=',a)
print('time.time()X1000=',a*1000)
print('int(time.time()X1000)=',int(a*1000))

爬虫 Python爬取有道翻译

嗯?

你问我怎么知道的…其实我是从未来穿越过来的,现在就要带你体验一遍我经历过的事,这样你就知道我是怎么知道的了~

'sign': '63a299cbcbb39c939542215f811da390'   #动态变化且加密的字符串,今天搞他。
 'lts': '1607756476615'   #时间戳嘛,不用多说了
 'bv': '79d103f0086f0e2586344a7cd1b549d7'
 'doctype': 'json'
 'version': '2.1'
 'keyfrom': 'fanyi.web'
 'action': 'FY_BY_REALTlME'

可以看出来,除了sign是加密的之外,其他的我们都能大致知道是什么。

如果你还是看不出来,说明你只抓了一次包,没有对比这些参数,懂我意思吧,快去多翻译几次抓包对比参数吧~

好的,知道了这些,我们能干什么呢…

先撸一下思路:我们要向已经找到的url发起post请求,然后携带了三个参数的请求头,还有一堆参数的data,就能返回一串json字符串,现在我们的问题就是解决sign,好嘞,思路明确,开冲!

爬虫 Python爬取有道翻译
爬虫 Python爬取有道翻译

直接在抓包工具中按下CTRL+F,进行一个全局搜索,当然如果你按不出来的话,也可以在这里这里这里找到他:
爬虫 Python爬取有道翻译
好吧,我说错了,是Ctrl+Shift+F。

然后直接全局搜索sign!

爬虫 Python爬取有道翻译
还是让我找到你啦,小老弟,点开这个js文件:

爬虫 Python爬取有道翻译
点进去之后是不是只有一行鸭,没关系,点击红框框里面的{ }按钮,见证奇迹的时刻到了!

爬虫 Python爬取有道翻译
铛铛裆,整理好啦~

爬虫 Python爬取有道翻译
然后我们就在这个文档里局部的搜索sign这个参数,如果看到比较像是加密程序的,就给它打一个断点,为什么呢?

因为打了断点之后我们在试着翻译啊,本地向服务器发送的数据就会被截胡,我们就可以看到她到底,是怎么加密的!

第一个很明显不是加密相关的代码,继续往下找:

爬虫 Python爬取有道翻译
有15个呢,一个个找吧,这里小泽就把几个疑似加密代码的截图下来:

爬虫 Python爬取有道翻译
打断点就是在8376那里点一下就好啦~

找到一个了,继续找:

爬虫 Python爬取有道翻译
这里是第二个疑似点,打上断点!

兜兜转转一圈就发现俩,都打上了断点,这个时候我们随便翻译一个词:

爬虫 Python爬取有道翻译
成功截胡!

接下来分析数据吧~

爬虫 Python爬取有道翻译
我们把鼠标移到这个e上面,会发现这个e是点赞,也就是我们要翻译的词,继续往下走吧:

爬虫 Python爬取有道翻译
可以看到上面的r是我们说的时间戳哈,然后i就是r后面跟了一个0到1之间的随机数乘以10的整数,也就是说是时间戳后面跟了一个随机数!

然后还可以看出来,这个sign是通过md5加密的,至于md5到底是个什么,我们后面再说。

到了这里就可以大致得出结论:

salt是时间戳加一个随机数
lts是时间戳
sign =md5( “fanyideskweb” + 要翻译的词 + salt + “Tbh5E8=q6U3EXe+&L[4c@”)

也就是说我们剩下要解决的就是这个md5加密到底要怎么破解,对吧。往下走吧:

爬虫 Python爬取有道翻译
移到这个md5上面,点开上面的蓝色字体。

爬虫 Python爬取有道翻译
会发现,我们找到了md5加密的方式,但是让你看你肯定是看不懂的嘛。

爬虫 Python爬取有道翻译
把这一串数据呢,就是{ } 花括号里的数据,都给复制一下,放到我们的…

爬虫 Python爬取有道翻译
这个软件里!

当然如果你比较懒,可以加我们的交流群,群里面有分享这个软件哦~

爬虫 Python爬取有道翻译
可以看到呢,有88%的妹纸,这个数量代表着什么不用我多说了吧!!!

快点进来撩妹纸把!!!

爬虫 Python爬取有道翻译
爬虫 Python爬取有道翻译
这里我们要把这个md5后面的:改成=才可以加载代码哦~

爬虫 Python爬取有道翻译
点击这个加载代码,然后可以看到函数列表里有个md5,说明我们已经可以在这里用这个md5加密的方法了!

爬虫 Python爬取有道翻译
然后我们再直接调用这个md5函数,随便放点东西进行加密,可以看到我们点击了这个计算表达式后程序给我们报错了哈,为什么呢?

爬虫 Python爬取有道翻译
这就不怪我了…你们没有对象,跟我可没有关系。

什么是缺少对象呢,不仅是说各位都找不到对象,还有一层意思就是说有一些参数是调用的外面的函数,我们返回最开始的js文档里往上找一找,看能不能找到对象!

爬虫 Python爬取有道翻译
爬虫 Python爬取有道翻译
爬虫 Python爬取有道翻译
可以看到,很多啊,那么这种时候我们怎么办呢?

全部复制!

喂喂喂,不是把全部js都复制啦!

爬虫 Python爬取有道翻译

从这里开始复制哦~

然后一直复制到…

爬虫 Python爬取有道翻译
md5上面的分号那里,给她粘贴到我们的js调试工具里面:

爬虫 Python爬取有道翻译

爬虫 Python爬取有道翻译
当你点击加载代码出来这么一堆数据的时候,就说明你粘贴对了。

爬虫 Python爬取有道翻译
我们再度调用这个md5的函数,可以看到,这次是成功的给我们加密了对吧,要注意md5的括号里是要加字符串的哦!

接下来的操作,不要问我为什么,好好看好好学!

爬虫 Python爬取有道翻译
先点开文件,然后导出,保存成js文件,然后拖动到我们的py文件的录下哈。
爬虫 Python爬取有道翻译
这里我起的名字是get_sign哦,很接地气的名字。

然后就开始我们的,代码编写!

爬虫 Python爬取有道翻译
爬虫 Python爬取有道翻译
这个execjs模块呢,就是上图的用法啦,可以调用我们js代码中的函数,来为我们的python服务。

爬虫 Python爬取有道翻译
大功告成!

爬虫 Python爬取有道翻译
完整代码会分享到交流群里,如果哪里还是不懂,在留言里说哦!

最后的最后呢,小泽想问一下大家想不想学习怎么做软件,就是让我们的代码能变成像QQ,网易云这些的有窗口的软件,想的话在留言里扣我爱你,人多就考虑开一个坑。

最后的最后的最后呢,在交流群里已经开始了“拼课”哈,也就是说如果你有哪个特别想买的课呢,但是又囊中羞色,就可以来一起拼一拼,让每一个贫穷的孩子都读得起书!

爱你们。

本文地址:https://blog.csdn.net/BcXbHello/article/details/111060606