爬虫 Python爬取有道翻译
Hello,大家好,这里是超级勤奋的小泽亲~
因为不会用目录所以直接不用目录…
那么今天要干什么呢?
标题不都说了嘛,进攻,有道翻译!
虽然说我们昨天已经试图进攻过有道翻译了,而且也貌似实现了效果,但是那只是一种错觉,其实昨天可以借鉴的主要是思路,总体来说是比较不合格的,鉴于让大家都能学会的原则呢,今天要再一次向有道翻译发起进攻!
首先,打开我们的有道翻译:
在当前页面呢,按下F12,或者右键,然后找到检查或者开发者工具,这里用谷歌浏览器或者360极速浏览器都是可以的哈。
然后打开我们的Network界面:
可以看到我们的Network界面里面是有一条信息的,当然如果你的没有也不打紧,点击红点点旁边的按钮,全部清空空一个都不留。
然后不要关掉这个窗口,也不要刷新页面,直接翻译一个词。
好的,蹦出来了很多信息,不要慌,让我们一起摸着前进!
这里让我们点开XHR界面,为什么要点开这里呢?
这样想,我们翻译的话,肯定要给服务器发送请求的吧,既然发送了请求,就会收到数据吧,不管是要的数据还是警告我们的数据,都要返回一个东西吧,所以呢这个东西就可以理解为动态的,就是我们需要跟服务器进行一个“交流”,所以就要在这个XHR里面找我们向服务器发送的请求,如果还是觉得很晕听不懂,说明你有在认真思考这个问题,说明你是真的…爱学习!
但是呢,有的时候也不要太过分追究到底是为什么,要知道,知道的太多,就会被灭口的!
打开这个XHR后,世界顿时清净了~
随便点开一个看看,因为都是一样的嘛:
看到没,红框框的都是我们要注意的,第一个红框框里面就是我们要的url,这里先记录一下:我们这次的url是:
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
要养成一边摸索一边记录的好习惯呦(╹▽╹)
然后就是我们这次请求呢,是POST请求,还有就是返回的数据是json数据。
好啦,继续往下滚:
可以看到有一个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主要是方便我们对号入座,用的多了也会自然而然的记住这个单词,麻麻再也不用担心我过不了四六级啦~
再往下翻,可以看到我们的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里面就是:
a = time.time()
print('time.time()=',a)
print('time.time()X1000=',a*1000)
print('int(time.time()X1000)=',int(a*1000))
嗯?
你问我怎么知道的…其实我是从未来穿越过来的,现在就要带你体验一遍我经历过的事,这样你就知道我是怎么知道的了~
'sign': '63a299cbcbb39c939542215f811da390' #动态变化且加密的字符串,今天搞他。
'lts': '1607756476615' #时间戳嘛,不用多说了
'bv': '79d103f0086f0e2586344a7cd1b549d7'
'doctype': 'json'
'version': '2.1'
'keyfrom': 'fanyi.web'
'action': 'FY_BY_REALTlME'
可以看出来,除了sign是加密的之外,其他的我们都能大致知道是什么。
如果你还是看不出来,说明你只抓了一次包,没有对比这些参数,懂我意思吧,快去多翻译几次抓包对比参数吧~
好的,知道了这些,我们能干什么呢…
先撸一下思路:我们要向已经找到的url发起post请求,然后携带了三个参数的请求头,还有一堆参数的data,就能返回一串json字符串,现在我们的问题就是解决sign,好嘞,思路明确,开冲!
直接在抓包工具中按下CTRL+F,进行一个全局搜索,当然如果你按不出来的话,也可以在这里这里这里找到他:
好吧,我说错了,是Ctrl+Shift+F。
然后直接全局搜索sign!
还是让我找到你啦,小老弟,点开这个js文件:
点进去之后是不是只有一行鸭,没关系,点击红框框里面的{ }按钮,见证奇迹的时刻到了!
铛铛裆,整理好啦~
然后我们就在这个文档里局部的搜索sign这个参数,如果看到比较像是加密程序的,就给它打一个断点,为什么呢?
因为打了断点之后我们在试着翻译啊,本地向服务器发送的数据就会被截胡,我们就可以看到她到底,是怎么加密的!
第一个很明显不是加密相关的代码,继续往下找:
有15个呢,一个个找吧,这里小泽就把几个疑似加密代码的截图下来:
打断点就是在8376那里点一下就好啦~
找到一个了,继续找:
这里是第二个疑似点,打上断点!
兜兜转转一圈就发现俩,都打上了断点,这个时候我们随便翻译一个词:
成功截胡!
接下来分析数据吧~
我们把鼠标移到这个e上面,会发现这个e是点赞,也就是我们要翻译的词,继续往下走吧:
可以看到上面的r是我们说的时间戳哈,然后i就是r后面跟了一个0到1之间的随机数乘以10的整数,也就是说是时间戳后面跟了一个随机数!
然后还可以看出来,这个sign是通过md5加密的,至于md5到底是个什么,我们后面再说。
到了这里就可以大致得出结论:
salt是时间戳加一个随机数
lts是时间戳
sign =md5( “fanyideskweb” + 要翻译的词 + salt + “Tbh5E8=q6U3EXe+&L[4c@”)
也就是说我们剩下要解决的就是这个md5加密到底要怎么破解,对吧。往下走吧:
移到这个md5上面,点开上面的蓝色字体。
会发现,我们找到了md5加密的方式,但是让你看你肯定是看不懂的嘛。
把这一串数据呢,就是{ } 花括号里的数据,都给复制一下,放到我们的…
这个软件里!
当然如果你比较懒,可以加我们的交流群,群里面有分享这个软件哦~
可以看到呢,有88%的妹纸,这个数量代表着什么不用我多说了吧!!!
快点进来撩妹纸把!!!
这里我们要把这个md5后面的:改成=才可以加载代码哦~
点击这个加载代码,然后可以看到函数列表里有个md5,说明我们已经可以在这里用这个md5加密的方法了!
然后我们再直接调用这个md5函数,随便放点东西进行加密,可以看到我们点击了这个计算表达式后程序给我们报错了哈,为什么呢?
这就不怪我了…你们没有对象,跟我可没有关系。
什么是缺少对象呢,不仅是说各位都找不到对象,还有一层意思就是说有一些参数是调用的外面的函数,我们返回最开始的js文档里往上找一找,看能不能找到对象!
可以看到,很多啊,那么这种时候我们怎么办呢?
全部复制!
喂喂喂,不是把全部js都复制啦!
从这里开始复制哦~
然后一直复制到…
md5上面的分号那里,给她粘贴到我们的js调试工具里面:
当你点击加载代码出来这么一堆数据的时候,就说明你粘贴对了。
我们再度调用这个md5的函数,可以看到,这次是成功的给我们加密了对吧,要注意md5的括号里是要加字符串的哦!
接下来的操作,不要问我为什么,好好看好好学!
先点开文件,然后导出,保存成js文件,然后拖动到我们的py文件的录下哈。
这里我起的名字是get_sign哦,很接地气的名字。
然后就开始我们的,代码编写!
这个execjs模块呢,就是上图的用法啦,可以调用我们js代码中的函数,来为我们的python服务。
大功告成!
完整代码会分享到交流群里,如果哪里还是不懂,在留言里说哦!
最后的最后呢,小泽想问一下大家想不想学习怎么做软件,就是让我们的代码能变成像QQ,网易云这些的有窗口的软件,想的话在留言里扣我爱你,人多就考虑开一个坑。
最后的最后的最后呢,在交流群里已经开始了“拼课”哈,也就是说如果你有哪个特别想买的课呢,但是又囊中羞色,就可以来一起拼一拼,让每一个贫穷的孩子都读得起书!
爱你们。
本文地址:https://blog.csdn.net/BcXbHello/article/details/111060606
推荐阅读
-
Python做有道翻译的的时候报http.client.RemoteDisconnected: Remote end closed connection without response
-
python3爬虫-通过selenium登陆拉钩,爬取职位信息
-
python 爬取淘宝第一弹(淘宝登录)
-
Python3.6实现带有简单界面的有道翻译小程序
-
【python】淘宝利用cookies登录,爬取商品信息
-
python爬虫爬取下载花瓣网女神照片
-
Python爬虫入门教程 13-100 斗图啦表情包多线程爬取
-
爬虫实践---新浪微博爬取+json+csv
-
Python爬虫实战之爬取某宝男装信息
-
有哪些网站用爬虫爬取能得到很有价值的数据?