python 实现有道翻译功能


Posted in Python onFebruary 26, 2021

初期操作

​打开有道翻译界面—F12—Network—在翻译框中输入'hello'—在Network下面发现名为'translate_o?smartresult......'返回翻译之后的数据

分析参数

把所有的Request Headers、params都写上尝试爬虫,可以得到结果。

​然后Request Headers中Headers、Host、Origin、Referer三项留下,Cookie一项经尝试只有 OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;会验证而且尝试多次之后我这里是没有变化的。

Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Length: 252
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65; OUTFOX_SEARCH_USER_ID_NCOO=1897197670.972445; JSESSIONID=aaalvPunK-sv2fyR-UjEx; ___rl__test__cookies=1612924426799
Host: fanyi.youdao.com
Origin: http://fanyi.youdao.com
Referer: http://fanyi.youdao.com/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36
X-Requested-With: XMLHttpRequest

再就是params参数,变化的是salt、sign、lts,尝试后发现lts可有可无,所以变化的只有salt、sign两项。

i: 你好
from: AUTO
to: AUTO
smartresult: dict
client: fanyideskweb
salt: 16129244361391
sign: 2820759b6e54f25e0aa94e185e2265e3
lts: 1612924436139
bv: 3da01a09873456cfb5dba05f2124b148
doctype: json
version: 2.1
keyfrom: fanyi.web
action: FY_BY_REALTlME

分析salt、sign

全局搜索sign,结果中有fanyi.min.js文件,双击进入,然后右键选择'Open in Source panel',搜索'sign',找到如下代码:

define("newweb/common/service", ["./utils", "./md5", "./jquery-1.7"], function(e, t) {
 var n = e("./jquery-1.7");
 e("./utils");
 e("./md5");
 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@")
  }
 };

​可以看出salt是13位时间戳加了一个10以内的随机数,而sign是'固定字符串+e+i+固定字符串',其中i就是salt,而e经过断点调试(我选择在var t = n.md5(navigator.appVersion)这一行加断点,然后输入你好,会出现e='你好')可以得知e为我们要翻译的字符串。这样整个分析过程就结束了。

​之后通过爬虫可以得到我们想要的数据,因为返回的是json数据,我们使用.json()来获得返回值更加方便。

Python代码

import hashlib
import random
import time
import requests


def get_data():
 r = str(round(time.time() * 1000))
 salt = r + str(random.randint(0, 9))

 content = '你好'

 data = "fanyideskweb" + content + salt + "Tbh5E8=q6U3EXe+&L[4c@"
 sign = hashlib.md5()

 sign.update(data.encode("utf-8"))

 sign = sign.hexdigest()
 # print(len(sign))
 # print(sign)
 return content, salt, sign


def send_request(content, salt, sign):
 url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

 headers = {
  'Cookie': 'OUTFOX_SEARCH_USER_ID=-1927650476@223.97.13.65;',
  'Host': 'fanyi.youdao.com',
  'Origin': 'http://fanyi.youdao.com',
  'Referer': 'http://fanyi.youdao.com/',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',
 }

 data = {
  'i': str(content),
  'from': 'AUTO',
  'to': 'AUTO',
  'smartresult': 'dict',
  'client': 'fanyideskweb',
  'salt': str(salt),
  'sign': str(sign),
  # 'lts': '1612879546052',
  # 'bv': '6a1ac4a5cc37a3de2c535a36eda9e149',
  # 'doctype': 'json',
  'version': '2.1',
  'keyfrom': 'fanyi.web',
  'action': 'FY_BY_REALTlME',
 }

 res = requests.post(url=url, headers=headers, data=data).json()

 print('翻译后:', res['translateResult'][0][0]['tgt'])
 print('翻译前:', res['translateResult'][0][0]['src'])


if __name__ == '__main__':
 content, salt, sign = get_data()
 send_request(content, salt, sign)

运行效果

python 实现有道翻译功能

以上就是python 实现有道翻译的详细内容,更多关于python 有道翻译的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python进阶教程之函数对象(函数也是对象)
Aug 30 Python
python任务调度实例分析
May 19 Python
python语言使用技巧分享
May 31 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python中reload(module)的用法示例详解
Sep 15 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
python实现两个文件夹的同步
Aug 29 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
Python如何生成xml文件
Jun 04 Python
Python爬取酷狗MP3音频的步骤
Feb 26 #Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 #Python
用python 绘制茎叶图和复合饼图
Feb 26 #Python
python lambda的使用详解
Feb 26 #Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 #Python
详解Python openpyxl库的基本应用
Feb 26 #Python
解决python的空格和tab混淆而报错的问题
Feb 26 #Python
You might like
Symfony页面的基本创建实例详解
2015/01/26 PHP
php实现复制移动文件的方法
2015/07/29 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
jquery 插件学习(六)
2012/08/06 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
angularJS 入门基础
2015/02/09 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
angular5 子组件监听父组件传入值的变化方法
2018/09/30 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python利用myqr库创建自己的二维码
2020/11/24 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
Java面试题汇总
2015/12/06 面试题
大学生学习生活的自我评价
2013/11/01 职场文书
合作经营协议书
2014/04/17 职场文书
网络技术专业求职信
2014/05/02 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
群众路线领导对照材料
2014/08/23 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
八年级英语教学计划
2015/01/23 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
商场广播稿范文
2015/08/19 职场文书