5. 爬取有道翻译
import requestsimport timeimport hashlibimport randomimport json# 创建一个类class translation: def __init__(self): self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' # 输入要翻译的文字 self.key = input('请输入要翻译的内容:') def fanyi(self): # 计算字符的长度,根据分析可知 中文字符占9个长度 英文占1个 使用编码后中文字符所占字符为3 if len(self.key) <= len((self.key).encode('utf8')): strs = (len((self.key).encode('utf8')) - len(self.key))//2 mstr = len(self.key) - strs keylen = 234 + mstr + strs * 9 print('当前输入的内容的长度为:%s' % keylen) # 获取当前的时间 random.randint 生成一个0-10的随机数 ts = str(int(time.time())*1000) lts = str(int(time.time())*1000) + str(random.randint(0, 10)) # 获取sign的值 n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@") strs1 = 'fanyideskweb'+self.key+lts+'Tbh5E8=q6U3EXe+&L[4c@' # print(strs1) # 加密 sign = hashlib.md5(strs1.encode('utf8')).hexdigest() # print(sign) header = { 'Content-Length': str(keylen), 'Cookie': 'OUTFOX_SEARCH_USER_ID=-368708839@10.108.160.18; JSESSIONID=aaaL2DMAbpTgg8Qpc2xUw; OUTFOX_SEARCH_USER_ID_NCOO=1451460344.418452; ___rl__test__cookies=1561684330987', 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OSX10_14_2) AppleWebKit/537.36(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' } data = { 'i': self.key, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': lts, # 获取的时间戳和随机数组合 'sign': sign, # 加密后 'lts': ts, # 时间戳 'bv': '75b5d8bae54495d5ccd243908d1f65d4', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } ress =requests.post(self.url, headers=header, data=data).text res =json.loads(ress) # print(res) # 输出结果 results = res['translateResult'][0][0]['tgt'] print(self.key+'的翻译结果为:%s' % results)if __name__ == '__main__': translation().fanyi()
import hashlibimport randomimport timeimport requestsimport json"""向有道翻译发送data,得到翻译结果"""class Youdao: def __init__(self, msg): self.msg = msg self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' self.D = "Tbh5E8=q6U3EXe+&L[4c@" self.salt = self.get_salt() self.sign = self.get_sign() self.ts = self.get_ts() def get_md(self, value): # md5加密 m = hashlib.md5() # m.update(value) m.update(value.encode('utf-8')) return m.hexdigest() def get_salt(self): # 根据当前时间戳获取salt参数 s = str(int(time.time() * 1000)) + str(random.randint(0, 10)) return str(s) def get_sign(self): # 使用md5函数和其他参数,得到sign参数 s = "fanyideskweb" + self.msg + self.salt + self.D return self.get_md(s) def get_ts(self): # 根据当前时间戳获取ts参数 s = int(time.time() * 1000) return str(s) def get_result(self): Form_Data = { 'i': self.msg, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': self.salt, 'sign': self.sign, 'ts': self.ts, 'bv': 'c6b8c998b2cbaa29bd94afc223bc106c', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_CLICKBUTTION' } headers = { 'Cookie': 'OUTFOX_SEARCH_USER_ID=-368708839@10.108.160.18; JSESSIONID=aaaL2DMAbpTgg8Qpc2xUw; OUTFOX_SEARCH_USER_ID_NCOO=1451460344.418452; ___rl__test__cookies=1561684330987', 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OSX10_14_2) AppleWebKit/537.36(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' } response = requests.post(self.url, data=Form_Data, headers=headers).text translate_results = json.loads(response) # 找到翻译结果 if 'translateResult' in translate_results: translate_results = translate_results['translateResult'][0][0]['tgt'] print("翻译的结果是:%s" % translate_results) else: print(translate_results)if __name__ == "__main__": y = Youdao('我成功啦') y.get_result()