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
对python中return和print的一些理解
Aug 18 Python
PyQt5每天必学之切换按钮
Aug 20 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
基于Python绘制个人足迹地图
Jun 01 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
python 用struct模块解决黏包问题
Nov 07 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
python如何为list实现find方法
May 30 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
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHP反射学习入门示例
2019/06/14 PHP
javascript 一些用法小结
2009/09/11 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
高级销售员求职信
2013/10/25 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
学生自我鉴定
2013/12/18 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
检讨书范文
2015/01/27 职场文书
企业安全生产检查制度
2015/08/06 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
六年级作文之关于梦
2019/10/22 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
Python语言内置数据类型
2022/02/24 Python