有道翻译是通过异步方式实现数据加载的,要实现这种网站的数据获取,过程比较繁琐,本节以有道翻译为例进行详细说明。 控制台捕获发现了POST请求的参数和相应的参数值,如下所示:
发现了post要求参数,salt、sign、lts总是变化,bv等其他参数不变化的规律。 其中,lts表示毫秒时间戳,并在salt和lts之间示出了某些关联。 因为两者只有最后的数字不同; 与sign对应的值是加密的字符串。 要实时捕获翻译结果,必须将salt和sign转换为Python代码表示的固定格式。 最后,将所有参数放入requests.post ),如下所示:
复制response=requests.POST(URL,data=data,headers=headers ) 1代码类型。 [python]其中data是字典式参数,用于构建post请求方法的参数和参数值。
JS代码slat、signsalt和sign加密有两种:在前端JS中实现,或在后台服务器生成加密字符串并在返回响应消息时将加密信息传递给浏览器客户端。 然而,预览响应消息时,由于没有关于salt、sign的信息,因此能够排除该方法。
那么如何找到关于salt、sign的JS代码呢? 在这种情况下,请使用其他调试工具的标签——JS。 如下图所示。
单击上图所示的搜索按钮搜索JS代码,然后键入' salt ',结果如图所示。
或者,也可以使用" Sources "标签设置fanyi.min.JS文件中的js代码的格式并输出,然后使用Ctrl F查找相应的" salt "位置,如下图所示。
通过上述方法找到了salt和sign(2 (两个参数项一起)的JS代码。 以下表示。
varr=function(e ) vart=n.MD5 ) navigator.appversion )、r=“”( new date ).getTime )、I=rparseint ) 10 * mm ime 1234567891011代码类型副本: [python]请注意,找到以上代码是解决本节问题的关键。 请大家一定要掌握方法。
通过对上述JS代码的简单分析,可以看出Python代码表示参数是r变量为lts、salt变量为I、sign为用md5加密的字符串。 下面,使用Python代码将上述参数表示为:
#lts毫秒时间戳str(int(time.time ) ) *1000 ) #salt,lts是0-9的随机数ltsstr ) random.randint ) 0, 9 ) #sign加密字符串from hashlib import md5#word是要翻译的单词,js代码中的' e ' string=' fanyideskweb ' words alt ' tbh5e8=q6u3Exel [ 4c @ 字节码s.update(string.encode ) )十六进制加密sign=s.hexdigest ) ) 12345678910111213必须是复制代码类型。 [python]完整的程序实现代码如下所示。
# coding:utf8 importrandomimporttimefromhashlibimportmd5importrequestsclassyoudaospider ( object ):def__init_ ) sou sou souder 但是,需要去除url中的“_o”。 #「_o”这是url反向策略,进行了页面跳转。 直接访问会导致{ ' error code ':50 } self.URL=' http://fanyi.Youdao.com/translatesmartresult=dictsmartresult=rule ' self ' self。 x64 ) appleWebKit/537.36(khtml,like Gecko ) chrome/89.0.4389.90 safari/537.36 ',}#lts时间戳、salt加密盐、 获取sign加密签名def的word(:lts=str(int(time.time ) *1000 ) ) salt=ltsstr ) random.randint, 9 ) string=' fanyideskweb ' words alt ' tbh5e8=q6u3Exel [ 4c @ ' s=MD5 ( ) s.update(string.encode ) ) sign=s sign to': 'AUTO ',' smartresult': 'dict ',' client': 'fanyideskweb ',' salt': salt,' sign': sign,' lts:' ' action ':' fy _ by _ realt LME ' } # reqeusts.post (使用方法创建RES=requests.post(URL=self.URL,data=data ) 请求heata ) ( # res.json ) (将json格式的字符串转换为python数据类型)以json字符串传递客户端和服务器的数据交换,并将其传递到python数据类型html=RES.JSON (响应结果responsehtml ) )、( translateresult )、( TGT )、( Hello )、( Slo )转换为“type”:“zh-CHS2en”}结果=hesult result ) defrun(self ):try: word=input (')请输入要翻译的单词( ' ) self.attack_yd ) word ) except Exception as e: print(e if _ name _=' _ _ main _ ':spider=Youdao spider ( ) spider.run ) 1234567891011121131416181920222222
请输入要翻译的单词。 你好。 这里是开课吧。 广场Python爬虫教程lts,salt,sign输出结果: 161647209209016164720920902 FCC 592626 aee 42e 1067 c 5195 cf 4c 4576 html响应内容: { ' type } ' error code 这里是开课吧。 广场Python爬行动物教程',' TGT ':' helloeveerthisisthebeginningofthesquarepythoncrawlertutorial ' }翻译结果: Hello everyone,
开课吧广场-人才学习交流平台
光遇1.23每日任务该怎么完成呢?在光遇世界有着各种精彩有趣的任务内容,玩家可以完成后获取大量的游戏奖励,小编
《云顶之弈》这游戏中卢安娜的飓风这件武器最近版本更新中被强化了,分裂攻击的伤害效果大大提升。有些小伙伴
迷你世界激活码2023是哪些呢?在精彩有趣的全新挑战活动中,玩家可以体验到更多丰富的游戏奖励。小编今天准备了
很多传奇的老玩家关心关于贪玩蓝月祝福油怎么用的相关问题,今天柠檬友玩小编给大家搜集整理了如下内容,希望对
《魔兽世界怀旧服》中存在着多样的公会制度,DKPROLL团就是其中之一,关于这个制度的意思好优劣势,本文将为你解
斗罗大陆魂师对决阵容最佳搭配2023,新版本上线了很多魂师,我们应该如何搭配呢?以下为大家分享新版本顶级阵容大
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30
时间:2022-12-30