5. 爬取有道翻译

  1. import requests
  2. import time
  3. import hashlib
  4. import random
  5. import json
  6. # 创建一个类
  7. class translation:
  8. def __init__(self):
  9. self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  10. # 输入要翻译的文字
  11. self.key = input('请输入要翻译的内容:')
  12. def fanyi(self):
  13. # 计算字符的长度,根据分析可知 中文字符占9个长度 英文占1个 使用编码后中文字符所占字符为3
  14. if len(self.key) <= len((self.key).encode('utf8')):
  15. strs = (len((self.key).encode('utf8')) - len(self.key))//2
  16. mstr = len(self.key) - strs
  17. keylen = 234 + mstr + strs * 9
  18. print('当前输入的内容的长度为:%s' % keylen)
  19. # 获取当前的时间 random.randint 生成一个0-10的随机数
  20. ts = str(int(time.time())*1000)
  21. lts = str(int(time.time())*1000) + str(random.randint(0, 10))
  22. # 获取sign的值 n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
  23. strs1 = 'fanyideskweb'+self.key+lts+'Tbh5E8=q6U3EXe+&L[4c@'
  24. # print(strs1)
  25. # 加密
  26. sign = hashlib.md5(strs1.encode('utf8')).hexdigest()
  27. # print(sign)
  28. header = {
  29. 'Content-Length': str(keylen),
  30. 'Cookie': 'OUTFOX_SEARCH_USER_ID=-368708839@10.108.160.18; JSESSIONID=aaaL2DMAbpTgg8Qpc2xUw; OUTFOX_SEARCH_USER_ID_NCOO=1451460344.418452; ___rl__test__cookies=1561684330987',
  31. 'Referer': 'http://fanyi.youdao.com/',
  32. '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'
  33. }
  34. data = {
  35. 'i': self.key,
  36. 'from': 'AUTO',
  37. 'to': 'AUTO',
  38. 'smartresult': 'dict',
  39. 'client': 'fanyideskweb',
  40. 'salt': lts, # 获取的时间戳和随机数组合
  41. 'sign': sign, # 加密后
  42. 'lts': ts, # 时间戳
  43. 'bv': '75b5d8bae54495d5ccd243908d1f65d4',
  44. 'doctype': 'json',
  45. 'version': '2.1',
  46. 'keyfrom': 'fanyi.web',
  47. 'action': 'FY_BY_REALTlME'
  48. }
  49. ress =requests.post(self.url, headers=header, data=data).text
  50. res =json.loads(ress)
  51. # print(res)
  52. # 输出结果
  53. results = res['translateResult'][0][0]['tgt']
  54. print(self.key+'的翻译结果为:%s' % results)
  55. if __name__ == '__main__':
  56. translation().fanyi()
  1. import hashlib
  2. import random
  3. import time
  4. import requests
  5. import json
  6. """
  7. 向有道翻译发送data,得到翻译结果
  8. """
  9. class Youdao:
  10. def __init__(self, msg):
  11. self.msg = msg
  12. self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
  13. self.D = "Tbh5E8=q6U3EXe+&L[4c@"
  14. self.salt = self.get_salt()
  15. self.sign = self.get_sign()
  16. self.ts = self.get_ts()
  17. def get_md(self, value):
  18. # md5加密
  19. m = hashlib.md5()
  20. # m.update(value)
  21. m.update(value.encode('utf-8'))
  22. return m.hexdigest()
  23. def get_salt(self):
  24. # 根据当前时间戳获取salt参数
  25. s = str(int(time.time() * 1000)) + str(random.randint(0, 10))
  26. return str(s)
  27. def get_sign(self):
  28. # 使用md5函数和其他参数,得到sign参数
  29. s = "fanyideskweb" + self.msg + self.salt + self.D
  30. return self.get_md(s)
  31. def get_ts(self):
  32. # 根据当前时间戳获取ts参数
  33. s = int(time.time() * 1000)
  34. return str(s)
  35. def get_result(self):
  36. Form_Data = {
  37. 'i': self.msg,
  38. 'from': 'AUTO',
  39. 'to': 'AUTO',
  40. 'smartresult': 'dict',
  41. 'client': 'fanyideskweb',
  42. 'salt': self.salt,
  43. 'sign': self.sign,
  44. 'ts': self.ts,
  45. 'bv': 'c6b8c998b2cbaa29bd94afc223bc106c',
  46. 'doctype': 'json',
  47. 'version': '2.1',
  48. 'keyfrom': 'fanyi.web',
  49. 'action': 'FY_BY_CLICKBUTTION'
  50. }
  51. headers = {
  52. 'Cookie': 'OUTFOX_SEARCH_USER_ID=-368708839@10.108.160.18; JSESSIONID=aaaL2DMAbpTgg8Qpc2xUw; OUTFOX_SEARCH_USER_ID_NCOO=1451460344.418452; ___rl__test__cookies=1561684330987',
  53. 'Referer': 'http://fanyi.youdao.com/',
  54. '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'
  55. }
  56. response = requests.post(self.url, data=Form_Data, headers=headers).text
  57. translate_results = json.loads(response)
  58. # 找到翻译结果
  59. if 'translateResult' in translate_results:
  60. translate_results = translate_results['translateResult'][0][0]['tgt']
  61. print("翻译的结果是:%s" % translate_results)
  62. else:
  63. print(translate_results)
  64. if __name__ == "__main__":
  65. y = Youdao('我成功啦')
  66. y.get_result()