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中list常用操作实例详解
Jun 03 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python获取当前函数名称方法实例分享
Jan 18 Python
Python实现的redis分布式锁功能示例
May 29 Python
Python面向对象类的继承实例详解
Jun 27 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
python 批量将中文名转换为拼音
Feb 07 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
模仿OSO的论坛(一)
2006/10/09 PHP
PHP 面向对象实现代码
2009/11/11 PHP
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
Python通过poll实现异步IO的方法
2015/06/04 Python
python中list列表的高级函数
2016/05/17 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
Python 创建TCP服务器的方法
2020/07/28 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
升职自荐信
2013/11/28 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
考核工作实施方案
2014/03/30 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书