700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python爬取有道翻译(破解加密--js加密)!

Python爬取有道翻译(破解加密--js加密)!

时间:2023-12-24 06:05:19

相关推荐

Python爬取有道翻译(破解加密--js加密)!

1.分析

有的数据是通过加密解密得到的。

加密:把明文变成密文

解密:把密文变成明文

常见的加密方式:

js加密

css加密

base64加密

尝试一下:

import requests# url = "/post"url = "/translate_o?smartresult=dict&smartresult=rule"headers = {'X-Requested-With': 'XMLHttpRequest','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36','Origin': '','Referer': '/','Cookie': 'OUTFOX_SEARCH_USER_ID=-1808168645@10.108.160.208; JSESSIONID=aaaRyVJv8oEwg7dPaWrux; OUTFOX_SEARCH_USER_ID_NCOO=704285648.1294403; ___rl__test__cookies=1602406917270'}data = {'action': 'FY_BY_CLICKBUTTION','bv': '9caf244986fe6d1de38207408302e500','client': 'fanyideskweb','doctype': 'json','from': 'AUTO','i': '你好','keyfrom': 'fanyi.web','lts': '1602406480004','salt': '16024064800043','sign': '726a3e12c15fcb8fda7dbd722a80f94b','smartresult': 'dict','to': 'AUTO','version': '2.1'}response = requests.post(url=url,headers=headers,data=data)print(response.content.decode("utf-8"))

发现,当修改翻译内容的时候,得不到想要的结果。其实做为一个合格的爬虫开发者,应该有敏感性。

断点调试js,查看变量值,再次确认。

var r = function(e) {var t = n.md5(navigator.appVersion)![在这里插入图片描述](https://img-/090429630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDg0MzUyMg==,size_16,color_FFFFFF,t_70#pic_center), r = "" + (new Date).getTime(), i = r + parseInt(10 * Math.random(), 10);return {ts: r,bv: t,salt: i,sign: n.md5("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m")}};

经过分析,确认参数:

ts是当前时间戳

bv是使用md5加密navigator.appVersion,只要浏览器不变,其实可以是固定的

salt是时间戳拼接0-9的随机整数字符串

sgin是md5加密的

这里的e通过断点调试确认e就是翻译的内容

接下来需要使用python来模拟这些信息:

import timeimport randomits = str(round(time.time(),3)).replace(".","")salt = its+str(random.randint(0,9))print(its,salt)

md5算法一般用来做加密,不可逆的。

import hashlibcontent = "diyisiifudsifhidfhsdhfsdkhfsdkhfksdhfkshkjdhjskhfksdhfkshfdh哈哈哈哈哈哈哈一hdd"md5 = hashlib.md5()md5.update(content.encode("utf-8"))ret = md5.hexdigest()print(ret,len(ret))

2.完整代码

import requestsimport timeimport randomimport hashlibfrom pprint import pprintdef main():"""主程序"""url = "/translate_o?smartresult=dict&smartresult=rule"headers = {'X-Requested-With': 'XMLHttpRequest','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36','Origin': '','Referer': '/','Cookie': 'OUTFOX_SEARCH_USER_ID=-1808168645@10.108.160.208; JSESSIONID=aaaRyVJv8oEwg7dPaWrux; OUTFOX_SEARCH_USER_ID_NCOO=704285648.1294403; ___rl__test__cookies=1602406917270'}i = input(">")data = get_data(i)response = requests.post(url=url,headers=headers,data=data)print(response.json()["translateResult"][0][0]["tgt"])def do_md5(content):"""md5方法"""md5 = hashlib.md5()md5.update(content.encode("utf-8"))return md5.hexdigest()def get_data(i):"""获取参数"""lts = str(round(time.time(), 3)).replace(".", "")salt = lts + str(random.randint(0, 9))sign = do_md5("fanyideskweb" + i + salt + "]BjuETDhU)zqSxf-=B#7m")data = {'action': 'FY_BY_CLICKBUTTION','bv': '9caf244986fe6d1de38207408302e500','client': 'fanyideskweb','doctype': 'json','from': 'AUTO','i': i,'keyfrom': 'fanyi.web','lts': lts,'salt': salt,'sign': sign,'smartresult': 'dict','to': 'AUTO','version': '2.1'}return dataif __name__ == '__main__':main()

3.结果

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

完整代码可以点击下方链接获取~

python免费学习资料以及群交流解答点击即可加入

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。