Python爬虫破解有道翻译
有道翻译是以异步方式实现数据加载的,要实现对此类网站的数据抓取,其过程相对繁琐,本节我以有道翻译为例进行详细讲解。
通过控制台抓包,我们得知了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与sign
salt、sign加密有两种实现方式:一种是通过前端JS实现,另一种是后台服务器生成加密串,并在返回响应信息时,将加密信息交给接浏览器客户端。但是,通过预览响应信息可知,并没有涉及salt、sign的信息,因此可以排除这种方法。
那么要如何找到关于salt、sign的JS代码呢?此时就要用到另外一个调试工具选项卡——JS。如下图所示:
点击上图所示的搜索按钮来检索JS代码,输入"salt",结果如图所示:
或者您也可以使用Sources选项卡将fanyi.min.js文件中的JS代码格式化输出,并使用Ctrl+F找到相应的"salt"位置,如下图所示:
通过上述方法就找到了salt与sign(两个参数项是在一起的)JS代码,如下所示:var r = function(e) { var t = n.md5(navigator.appVersion), r = "" + (new Date).getTime(), i = r + parseInt(10 * Math.random(), 10); return { ts: r, bv: t, salt: i, sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") } };1234567891011复制代码类型:[python]
注意,找到上述代码是解决本节问题的关键,大家一定要要掌握方法。Python代码表示参数
通过上述JS代码的简单分析可知:r变量等同于lts,salt变量等同于i,而sign是一个经过md5加密的字符串。接下来使用Python代码来表示上述参数,如下所示:#lts毫秒时间戳 str(int(time.time()*1000)) #salt, lts+从0-9的随机数 lts+str(random.randint(0,9)) #sign加密字符串 from hashlib import md5 #word为要翻译的单词等同于js代码中的"e" string = "fanyideskweb" + word + salt + "Tbh5E8=q6U3EXe+&L[4c@" s = md5() #md5的加密串必须为字节码 s.update(string.encode()) #16进制加密 sign = s.hexdigest()12345678910111213复制代码类型:[python]完整程序实现
完整代码如下所示:#coding:utf8 import random import time from hashlib import md5 import requests class YoudaoSpider(object): def __init__(self): # url一定要写抓包时抓到的POST请求的提交地址,但是还需要去掉 url中的"_o", # "_o"这是一种url反爬策略,做了页面跳转,若直接访问会返回{"errorCode":50} self.url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" self.headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", } # 获取lts时间戳,salt加密盐,sign加密签名 def get_lts_salt_sign(self,word): lts=str(int(time.time()*1000)) salt=lts+str(random.randint(0,9)) string = "fanyideskweb" + word + salt + "Tbh5E8=q6U3EXe+&L[4c@" s=md5() s.update(string.encode()) sign=s.hexdigest() print(lts,salt,sign) return lts,salt,sign def attack_yd(self,word): lts,salt,sign=self.get_lts_salt_sign(word) #构建form表单数据 data={ "i": word, "from": "AUTO", "to": "AUTO", "smartresult": "dict", "client": "fanyideskweb", "salt": salt, "sign": sign, "lts": lts, "bv": "cda1e53e0c0eb8dd4002cefc117fa588", "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_REALTlME" } #使用 reqeusts.post()方法提交请求 res = requests.post( url=self.url, data=data, headers=self.headers, ) # res.json() 将json格式的字符串转为python数据类型 # 客户端与服务器数据交互以json字符串传递,因此需要将它转换为python数据类型 html=res.json() print(html) # 查看响应结果response html:{"translateResult":[[{"tgt":"hello","src":"你好"}]],"errorCode":0,"type":"zh-CHS2en"} result=html["translateResult"][0][0]["tgt"] print("翻译结果:", result) def run(self): try: word=input("请输入要翻译的单词:") self.attack_yd(word) except Exception as e: print(e) if __name__ == "__main__": spider=YoudaoSpider() spider.run()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263复制代码类型:[python]
输出结果:请输入要翻译的单词:大家好,这里是开课吧广场Python爬虫教程 lts,salt,sign 输出结果: 1616472092090 16164720920902 fcc592626aee42e1067c5195cf4c4576 html 响应内容: {"type": "ZH_CN2EN", "errorCode": 0, "elapsedTime": 25, "translateResult": [[{"src": "大家好,这里是开课吧广场Python爬虫教程", "tgt": "Hello everyone, this is the beginning of the square Python crawler tutorial"}]]} 翻译结果: Hello everyone, this is the beginning of the square Python crawler tutorial
开课吧广场-人才学习交流平台
俄罗斯黑客发动反击,目标西方十国政府,意大利政府网络已瘫痪俄罗斯对乌克兰的特别军事行动已经进行了80多天,俄罗斯的黑客们也不甘寂寞在网络上对西方十个国家发起了网络攻击。这十个国家中美国首当其冲,其次还有英国德国波兰意大利罗马尼亚拉脱维亚爱
魅族19系列曝光!还是小而美吗?魅族是中国手机品牌的一股清流,过去是,现在是,未来也将是。原因无他,只是因为魅族重视设计和外观的设计理念深入人心,对侘寂企业文化的追寻和建设不像是一家科技公司,倒像是一家文化公司。
中创新航虎口夺食,宁王挥舞专利大棒图片来源视觉中国文雷达财经,作者李亦辉,编辑深海作为中国的动力电池一哥,宁德时代对于敢从自己口中抢食的厂家,从不手软。5月23日,宁德时代确认,由于涉诉产品价值金额巨大,公司向法院
多国爆发猴痘,意味着什么?近日,英国美国西班牙等多国报告发现猴痘病例。世界卫生组织表示,随着监测范围的扩大,不排除未来发现更多病例。猴痘是一种人兽共患病。1958年,欧洲科学家从实验室的猴子体内分离出猴痘病
Vue3。0有哪些新特性值得我们提前了解一迎接Vue3。01。简介Vue。js作者兼核心开发者尤雨溪宣布Vue3。0进入Beta阶段。已合并所有计划内的RFC已实现所有被合并的RFCVueCLI现在通过vuecliplu
iPhone关机后仍在运行?曝iPhone关机后仍在运行或成恶意软件温床一直以来,苹果都以极高的安全性自诩,甚至被美国政府要求解锁iPhone都直接拒绝,但现在看来这个安全性有些搞笑了。据悉,iPhone上有
同时看到两个世界?他被当疯子关了30年,王者归来获得诺贝尔奖1994年5月23号,在瑞典斯德哥尔摩举办的诺贝尔颁奖典礼上,一位文质彬彬身材消瘦的男子吸引了人们的注意,他站起身接受了诺贝尔经济学奖,并优雅地鞠了一躬。在场的很多人心中都充满了感
华为手机王者要归来了?文花姐如果要问谁是当下最憋屈的手机厂商,华为可能当之无愧。手握最领先的5G技术,却只能不断推出4G旗舰机型。拥有领先的麒麟芯片,却长期遭遇代工厂断供之苦。2021年,华为手机销量从
VIVOX80系列正式发布!线下王者蓝厂开始走性价比路线了?3699元的起售价格,看起来还不算便宜对吧?这是VIVO全新一代的旗舰机型X80系列的起售价格,作为蓝厂的旗舰系列相对比去年的X70系列已经是降价并且配置方面也实现了大幅度的升级,
有哪个App会让你感觉值得推荐,愈用愈爱?说说最近用的吧,hope时间胶囊。的确是越用越好用,因为它是一款经得起时间考验的软件,因为它就是时间。一开始只是被它非常清新的界面所吸引,黄色的主调给人以特别明朗的感觉。初次下载可
北美确诊病例连续5周上升大型研究称奥密克戎与其他变异株一样严重中国日报网5月5日电据路透社5月5日报道,美国一项大型研究发现,奥密克戎变异株本质上与此前出现的其他新冠病毒变异株一样严重,并不像以往研究中所假定的传播性更强,但不那么严重。据报道
老K想聊聊华为海思,麒麟能否浴火重生老K想聊聊海思!华为2004年成立海思半导体有限公司,前身是创建于1991年的华为集成电路设计中心,海思一开始做芯片也不是一帆风顺,在2012年推出海思k3v2移动端处理器,k3v
业务员每天出门要带两部iPhone一部安卓机两个充电宝和三张手机卡,不然会没安全感,你怎么看?感谢您的阅读!我现在确实是这样的操作虽然不是业务员,每天工作原因,都必须带两部手机出门,一部手机工作生活一部手机娱乐休闲。当然,充电宝我是不带的,之前用的是小米充电宝,不过我觉得充
几乎0差评的4款手机,价格覆盖中高低三档,可以闭眼入手回顾目前已经发布的手机,有些虽然配置全面价格低,但口碑非常低,导致这一现象的原因基本都是系统优化不当,机身品质太差,软硬件出现了冲突等等,但同时也有很多口碑特别高的手机,比如下面这
为什么越来越多的人买手机不考虑华为?主要有这3大原因马上年底了,身边的亲朋好友又迎来了一小波换机高潮,考虑的手机品牌有苹果小米OPPOvivo,基本没有选择华为的。那么,为什么越来越多的人买手机不考虑华为呢?其实,我以前也算是一名忠
手机界的八大王者品牌,华为小米苹果全都有纵观2021年,各品牌手机层出不穷,有些黑科技技术也从概念机阶段发展到了量产机阶段,大帅结合各品牌突出特点,总结了机圈八大王者系列。影像王者华为作为手机拍照系列的经典机型,华为P系
浅谈新一代智能电能表支撑泛在电力物联网技术研究张星安科瑞电气股份有限公司上海嘉定201801摘要物联网技术在未来的电力能源体系发展中,已经成为一种重要的趋势,在现阶段的发展,具备感知广泛连接开放共享等特点。基于此,文中对电力物
教程7国产编程语言Cbrother类定义类和对象类类是一个模板,它描述一类对象的行为和状态。对象对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有颜色名字品种行为有摇尾巴叫吃等。CBrother中的类类
更智能更主动数字技术助推健康管理新模式科技日报记者崔爽如何将科技创新转化为医疗服务?近日召开的第二届中国健康管理国际论坛上,中国工程院院士上海理工大学光电信息与计算机工程学院院长庄松林抛出这样一个问题。尤其是在医学技术
12月9日股市内参一投资资讯1阿里成立元境先生进一步布局元宇宙业务VR游戏领域受关注据报道,阿里近日成立全资子公司元境生生,阿里内部人士透露,该公司未来业务与元宇宙相关。今年9月,阿里云游戏事业部发
亚马逊美国站卖家注意!您的美标该宣誓了,错过时间商标将会失效年终旺季收尾阶段,一年中重要的几个节日也相继而来,相信不少亚马逊卖家都已全力备战,准备大干一场了。亚马逊美国站作为最早开设的站点,受众群体广,吸引了大批中国卖家入驻。近几年,市场对
无聊时的体验构想我设想了一种体验设计,把一副耳机埋进墙壁里或者埋进水泥墩里。两头分别露出插孔和听筒。那些没有带耳机的人,想要听歌的话,他需要在那个石头旁边或者在墙旁边。耳机的听筒可以设置的高一些也