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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python基础练习之几个简单的游戏
Nov 10 Python
对python中的logger模块全面讲解
Apr 28 Python
python实现顺序表的简单代码
Sep 28 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
python中比较两个列表的实例方法
Jul 04 Python
Python帮你识破双11的套路
Nov 11 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
实操Python爬取觅知网素材图片示例
Nov 27 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+DBM的同学录程序(2)
2006/10/09 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
获取远程文件大小的php函数
2010/01/11 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
django_orm查询性能优化方法
2018/08/20 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
详解Python传入参数的几种方法
2019/05/16 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
深入了解python中元类的相关知识
2019/08/29 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
自荐信模版
2013/10/24 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
教师自查自纠材料
2014/10/14 职场文书
退伍军人感言
2015/08/01 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript