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实现baidu hi自动登录的代码
Feb 10 Python
python实现统计代码行数的方法
May 22 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
详解Django中Request对象的相关用法
Jul 17 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python编程中flask的简介与简单使用
Dec 28 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python实现学生管理系统开发
Jul 24 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
Django展示可视化图表的多种方式
Apr 08 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
浅谈php调用python文件
2019/03/29 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
javascript模拟枚举的简单实例
2014/03/06 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
vue+element实现批量删除功能的示例
2018/02/28 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
详解Python中的分支和循环结构
2020/02/11 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
方法名是否可以与构造器的名字相同
2012/06/04 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
机电一体化求职信
2014/03/10 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
会议邀请函
2015/01/30 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
社区工作者个人总结
2015/02/28 职场文书
党员带头倡议书
2015/04/29 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
如何写好闭幕词
2019/04/02 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
JS实现简单九宫格抽奖
2022/06/28 Javascript