Python反编译调用有道翻译(附完整代码)
然而理论上而言,所有看得见的东西都是爬得到的,有道翻译接口也一样。为了祖国未来花朵(咸鱼) 的发展,今天就来给大家介绍一下如何用 Python 超简单快速地调用有道翻译得到翻译结果 。此外,本教程仅供学习哦。
如果你懒得看教程,只想要拿到源代码,请关注 Python 实用宝典公众号并回复:“Python 有道接口” 。
PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
1. 找到翻译相关接口
打开 fanyi.youdao.com 随便输入一个单词进行翻译,使用开发者工具(空白处右键检查或 F12)查看请求数据。
可以看到,请求的接口是:\
http://fanyi.youdao.com/translate_o?smartr...
开发者工具往下拉,查看 Form Data 得到请求的 body 是:
- i: 你好
- from: AUTO
- to: AUTO
- smartresult: dict
- client: fanyideskweb
- salt: 15707931034929
- sign: 99d0fc48506346afc40e36d5648cc320
- ts: 1570793103492
- bv: ca3dedaa9d15daa003dbdaaa991540d1
- doctype: json
- version: 2.1
- keyfrom: fanyi.web
- action: FY_BY_REALTlME
2. 解析请求 body 内容
显然,以上 body 内容中,i 是需要翻译的文本,from 是原文语言,to 是翻译语言。我们其他的参数只需要设置为一致的即可。现在需要解决这几个参数:salt, sign, bv,ts.
ts 从格式上看就知道是时间戳,而且 ts 和 salt 内容很接近,且只差了一位,可以合理猜测,salt 就是 ts+1 位随机数。
接下来就差 sign 和 bv,这两个值看起来非常像 MD5,不过不确定是什么参数的 MD5,因此需要阅读前端源代码。
在 performance 中录制,重新请求接口,找到翻译接口的前端代码 (fanyi.min.js). 然后搜索我们的关键词 sign 或者 bv. 使用 debug 工具查看值的流动。
从这里我们可以知道,bv 即浏览器头部信息 MD5 的值,我的浏览器头部是这样的: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
实际上在请求接口的时候随便用什么头部都能过这个校验,只要符合标准就行。
最后一个未知参数是 sign. 同样,我们打开 debug 模式,输入信息,就可以得到其值了。
很显然,sign 由 n.md5 ("fanyideskweb" + e + i + "n% A-rKaT5fb [Gy?;N5@Tj") 组成,而 e 根据 debug 显示的结果,就是我们需要翻译的信息,而 i 就是 salt. 因此 4 个参数我们全部成功反编译!
3. 用 Python 调用接口进行翻译
我们只需要伪造请求的 body,向接口发送 post 请求即可得到翻译结果。比如,ts 是 13 位时间戳,在 Python 中可以使用 time.time ()*1000 获得:
- ts = str(int(time.time()*1000))
salt 是 ts + 一位随机数,太简单了:
- salt = ts + str(random.randint(0, 9))
bv 是浏览器 User-Agent,需要进行 MD5 计算,我们新建一个 MD5 函数,将字符串传入函数获得 MD5。
- def get_md5(string):
- string = string.encode('utf-8')
- md5 = hashlib.md5(string).hexdigest()
- return md5
- bv = get_md5("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")
sign 是四个字符串组成后进行 MD5 的结果:
- sign = get_md5("fanyideskweb" + context + salt + "n%A-rKaT5fb[Gy?;N5@Tj")
这样,我们获得了所有需要用到的参数,集合在一起后发送 post 请求。
试一下效果:
- print (translation (' 你好 '))
成功得到接口返回的翻译结果:
- (base) F:\push\20191011>python YouDaoSpider.py
- hello
以上就是本次分享,另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作删除处理。
Python反编译调用有道翻译(附完整代码)的更多相关文章
- 如何用python“优雅的”调用有道翻译?
前言 其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js“斗争”的过程! 当然,本文仅 ...
- python 反编译模块uncompyle2的使用--附破解wingide5 方法
原来一直用pycharm,无奈它常常无法使用.来訪问一些模块的属性,朋友推荐了wingide,于是去官网下载了wingide5的最新版本号,仅仅有10天的试用期,就想能否用python的uncompy ...
- python调用有道翻译api实现翻译
通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...
- C++调用有道翻译API实现在线翻译之发声篇
大概半月前写了一篇博文:C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译, 得到大家的热情捧场,有人看了文章说要是能发声不是更好,我觉得说的也是哈,能听到专家的标准发音,那该是多美的 ...
- python反编译工具
开发类在线工具:https://tool.lu/一个反编译网站:https://tool.lu/pyc/ 一看这个标题,就是搞坏事用的, 用 java 写程序多了,很习惯用反编译工具了,而且玩java ...
- Android 监听双卡信号强度(附完整代码)
Android 监听双卡信号强度 监听单卡信号强度 监听单卡的信号强度非常简单直接用TelephonyManager.listen()去监听sim卡的信号强度. TelephonyManager = ...
- JPG学习笔记3(附完整代码)
#topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, ...
- python反编译之字节码
如果你曾经写过或者用过 Python,你可能已经习惯了看到 Python 源代码文件:它们的名称以.Py 结尾.你可能还见过另一种类型的文件是 .pyc 结尾的,它们就是 Python "字 ...
- C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译
使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...
随机推荐
- 用cmd打开TXT(中文)文件,以及创建空文件,删除文件,改变输入法
编码 十进制 ut-8 65001 GBK 936 美国英语 437 windows cmd 默认为 ...
- Python基础概念
一.Python中执行代码的方式 直接在编译器中交互执行: 在编译器中通过Python和文件的路径执行: 在linux系统中可以./test.py(需要代码第一行增加# !/usr/bin/env p ...
- java字符串操作扩充:灵活截取字符串
java字符串操作扩充:灵活截取字符串 public class StringUtil { static int varlen1; static int varlen2; static String ...
- 初识压缩感知Compressive Sensing
压缩感知是近年来极为热门的研究前沿,在若干应用领域中都引起瞩目.最近粗浅地看了这方面一些研究,对于Compressive Sensing有了初步理解,在此分享一些资料与精华.本文针对陶哲轩和Emman ...
- Ubuntu使用ipython出现版本不兼容的问题
今天租了一个ECS,然后准备安装了jupyter,准备配置,输入ipython,出现如下报错 ImportError: IPython 7.10+ supports Python 3.6 and ab ...
- Python标准库之时间模块time与datatime模块详解
时间模块time与datatime 时间表示方式: 时间戳 格式化时间字符串 元组 时间戳格式: time.time()#输出1581664531.749063 元组格式: time.localtim ...
- SpringBoot整合WEB开发--(七)注册拦截器
1.创建一个拦截器类实现HandlerInterceptor接口,重写其中的3个方法,这拦截器中方法的执行顺序为:preHandle--Controller--postHandle--afterCom ...
- SpringMVC 源代码深度解析 IOC容器(Bean 解析、注册)
SpringMVC通过一个配置文件描述Bean以及Bean之间的依赖关系,利用Java的反射机制实例化Bean并建立Bean之间的依赖关系.IOC容器在完成这些底层工作的基础还提供了Bean的实例缓. ...
- python接口自动化之fiddler使用(二)
1.快捷设置,自定义会话框,查看get和post请求 (1)鼠标放在#后面,右键 (2)选择Customize columns (3)选择Miscellaneous (4)选择RequestMetho ...
- 广度优先搜索(Breadth First Search, BFS)
广度优先搜索(Breadth First Search, BFS) BFS算法实现的一般思路为: // BFS void BFS(int s){ queue<int> q; // 定义一个 ...