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去除字符串两端空格的方法
May 21 Python
Python进阶之尾递归的用法实例
Jan 31 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
DRF使用simple JWT身份验证的实现
Jan 14 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
js文字横向滚动特效
2015/11/11 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
wxPython实现文本框基础组件
2019/11/18 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
2014年居委会工作总结
2014/12/09 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android