net做公司网站,西部数码网站管理助手 绑定域名,网站制作建站,网站怎么做关键词爬虫#xff1a;突破有道翻译js加密
代码已上传至个人GitHub#xff0c;可供下载#xff1a; 突破有道翻译js加密 思路#xff1a;#xff08;python版本3.6#xff09; 1、分析post上传form信息#xff0c;发现存在加密行为 2、查看网页js文件#xff0c;分析加密函数…爬虫突破有道翻译js加密
代码已上传至个人GitHub可供下载 突破有道翻译js加密 思路python版本3.6 1、分析post上传form信息发现存在加密行为 2、查看网页js文件分析加密函数 3、根据加密函数原理进行解密突破有道的翻译接口 一、打开有道翻译网页按F12键并输入内容进行翻译可以看到服务器对网页请求作出的回应最需要关注的是上传的信息和上传的路径URL。 通过多次观察发现上传的form信息中不断变化的信息是i、salt、sign、ts其他的信息都是不变的。 根据以往经验就可以判断salt、sign、ts就是有道翻译为机器获取其翻译内容所设置的障碍。
二、寻找js文件中相应的加密函数并分析其加密过程。
刷新一下网页就可以看到反馈回来的各种js文件fanyi.min.js最为显眼像不像【翻译*密.js】。 打开fanyi.min.js文件并将js代码进行格式化并查找相应的加密函数。 将格式化后的js代码放入txt文档进行查找操作可以得到如下的加密函数。 由上图函数可以看到ts、bv、salt、sign参数的由来整理如下
ts指的是获取当前的时间戳乘以1000取整bv获取当前有道翻译版本的MD5编码版本一般长时间不变saltts加上[1, 10]之间的随机数signmd5(“fanyideskweb” 要翻译的内容 salt 1L5ja}w$puC.v_Kz3yYn)
注意由于有道翻译的反爬虫机制其中的参数每过一段时间可能会改变或者直接加密函数发生改变但不变的解决问题的思想。
三、根据对加密函数的分析就可以写相对应的解密代码了
from urllib import request, parse
import time
import random
import hashlib
import jsondef get_ts():ts str(int(1000 * time.time()))return tsdef get_salt(ts):salt ts str(random.randint(0, 10))return saltdef get_sign(words, salt):content fanyideskweb words salt 1L5ja}w$puC.v_Kz3yYnsign hashlib.md5(content.encode()).hexdigest()return signdef translate(words, ts, salt, sign):url http://fanyi.youdao.com/translate_o?smartresultdictsmartresultruledata {i: words,from: AUTO,to: AUTO,smartresult: dict,client: fanyideskweb,salt: salt,sign: sign,ts: ts,bv: bbb3ed55971873051bc2ff740579bb49,doctype: json,version: 2.1,keyfrom: fanyi.web,action: FY_BY_REALTIME,typoResult: false}data parse.urlencode(data).encode()headers {Accept: application/json, text/javascript, */*; q0.01,# Accept-Encoding: gzip, deflate,Accept-Language: zh-CN,zh;q0.9,Connection: keep-alive,Content-Length: len(data),Content-Type: application/x-www-form-urlencoded; charsetUTF-8,Cookie: __guid204659719.2422785200799945700.1554675512727.244; OUTFOX_SEARCH_USER_ID-132727508610.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO378292303.3354687; JSESSIONIDaaaLYwaICIOxi6ofRh8Nw; monitor_count8; ___rl__test__cookies1554693830913,Host: fanyi.youdao.com,Origin: http://fanyi.youdao.com,Referer: http://fanyi.youdao.com/,User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36,X-Requested-With: XMLHttpRequest}req request.Request(urlurl, datadata, headersheaders)rsp request.urlopen(req)html rsp.read().decode(utf-8)json_data json.loads(html)print(翻译的结果为 json_data[translateResult][0][0][tgt])if __name__ __main__:words input(请输入要翻译的内容)ts get_ts()salt get_salt(ts)sign get_sign(words, salt)translate(words, ts, salt, sign)
运行结果 代码已上传至个人GitHub可供下载 突破有道翻译js加密