详解python使用金山词霸的翻译功能(调试工具断点的使用)


Posted in Python onJanuary 07, 2021

今天试着用python获取金山词霸的翻译功能,链接在这里:
ICIBA传送门
打开之后,界面是这样的,还是比较干净的。

详解python使用金山词霸的翻译功能(调试工具断点的使用)

按F12,打开调试工具,选择Network,找到XHR

详解python使用金山词霸的翻译功能(调试工具断点的使用)

这里就是查看网络传输的内容。XHR就是不刷新页面的网络传输,就是常说的ajax(阿贾克斯,像是希腊神话里的名字……)。
然后我们在翻译窗口写点儿内容,然后点翻译

详解python使用金山词霸的翻译功能(调试工具断点的使用)

看,左边的页面出现了翻译结果,右边调试窗口出现了两条数据传输。
两条?那我们选哪条呢?点开看看……
哦,天哪~两条都是一样的,那我们随便选一条就可以了。
点一下,看后面的内容

详解python使用金山词霸的翻译功能(调试工具断点的使用)

好了,首先看到的是Request URL。嗯……就是我们要的URL了。
先记下来……
(你是用复制、粘贴,还是键盘上手打?难道是抄在本子上?)
下面的Post也要记住,这是请求类型,别用成get了。
再往下,

详解python使用金山词霸的翻译功能(调试工具断点的使用)

上面那部分是不是很熟悉?对了,就是URL链接里的东西。不管他,URL里有了就好了。
下面的部分,就是要提交的数据了。
把这部分转成字典格式:

data = {
	'from':'zh'
	'to':'en'
	'q':'风'
}

 

fromto这就好理解了,就是从中文到英文嘛。好,咱们不管他是中是英,都给成“auto”,让他自己去猜去……
q就是我们查的词语,那我们就用变量q表示吧,这样改后的字典就是:

data = {
	'from':'auto'
	'to':'auto'
	'q':q
}

提交的数据有了,那我们把请求头建立起来吧
再让我们回到调试工具里去看下

详解python使用金山词霸的翻译功能(调试工具断点的使用)

headers就是请求头部,那里面这么多东西,我们要用什么呢?
当然**User-Agent:**不能少了

headers = {
  'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER'
  }

好了,我们需要的东西都齐了,那就开始吧:
首先是引入文件,

import requests

我们再到调试工具里看下返回值,看下获取的内容是什么格式的。一般返回值有json的,也有html的。

详解python使用金山词霸的翻译功能(调试工具断点的使用)

这里把返回的结果给你了,这就是json的数据格式。
我们用q来获取输入的文本

q = input('请输入要翻译的内容:')

整理后就是这样了:

import requests
q = input('请输入要翻译的内容:')
headers = {
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
 }
url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba&sign=c1b23d3ff9163427'
data = {
 'from':'auto',
 'to':'auto',
 'q':q
  }

res = requests.post(url=url,headers=headers,data=data).json()
print(res)

好了,运行一遍试下

详解python使用金山词霸的翻译功能(调试工具断点的使用)

我们输入要翻译的内容,

详解python使用金山词霸的翻译功能(调试工具断点的使用)

不错,结果返回了,是json格式的数据,里面有我们需要的结果。
再换个词试下……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

这是什么情况?为什么错了?
好吧,我们在浏览器里试下

详解python使用金山词霸的翻译功能(调试工具断点的使用)

点开看一下……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

发现了吗?sign不一样……
前一个是什么?

sign=c1b23d3ff9163427'

这个是

sign=4b733a5ea3f4dd5a

sign是动态生成的,怎么办?找生成方法!

详解python使用金山词霸的翻译功能(调试工具断点的使用)

我们看这里……

这是运行的代码的位置,我们点进去……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

上面老长一行了,怎么办?
看左下角的大括号了吗?点下就会有惊喜!

详解python使用金山词霸的翻译功能(调试工具断点的使用)

好棒!已经排列整齐了……
下面就是在这里查找sign的位置了,Ctrl+F,开始搜索

详解python使用金山词霸的翻译功能(调试工具断点的使用)

23个结果,一个个看过去……找找哪个比较像加密的……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

看,这里是对URL进行拼接的。上面就是sign的加密方式
sign后面拼接的是个r,r就是上面的一行算出来的,

r = c()("6key_cibaifanyicjbysdlove1".concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))).toString().substring(0, 16);

你看,这个r就是用一系列字符串拼接起来的,都有什么呢?

1、"6key_cibaifanyicjbysdlove1"
2、t.q.replace(/(^\s*)|(\s*$)/g, "")

第一个简单,就是一串固定的字符串
第二个呢?t.q是什么鬼?我们来找一下……
好,我们在这一行打个断点,就是在前面的行号上点一下。

详解python使用金山词霸的翻译功能(调试工具断点的使用)

看见蓝色的标签了吧,这就是个断点。在运行的时候,运行到这里就会停止,然后把当前状态给你报出来。好了,断点有了,

咱们让点下翻译,让他运行下看看

详解python使用金山词霸的翻译功能(调试工具断点的使用)

运行到断点时,停止了,并将当前的参数显示了出来。把鼠标放在q上……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

所得寺内!原来就是我们要查的词哦……
然后就把他们拼在一起……

"6key_cibaifanyicjbysdlove1"+"云"

可是c()又是什么鬼?好吧,我们看下加密后的结果是什么

详解python使用金山词霸的翻译功能(调试工具断点的使用)

这个字符串是不是很眼熟?很像md5不是吗?
好的,那我们找一个md5加密工具试下,把加密前的字符串拼接起来

"6key_cibaifanyicjbysdlove1云"

然后我们放到md5加密工具里,看结果

详解python使用金山词霸的翻译功能(调试工具断点的使用)

看这里……

详解python使用金山词霸的翻译功能(调试工具断点的使用)

是不是这个?32位加密后的前16位!
我们再验证一下,换一个词查下,我们查下“雨”

详解python使用金山词霸的翻译功能(调试工具断点的使用)

我把字符串拼接好

"6key_cibaifanyicjbysdlove1雨"

放到md5工具里看下

详解python使用金山词霸的翻译功能(调试工具断点的使用)

是不是一样的?好了,我们知道sign的加密规则了,那我们自己就把这个sign加密。
要用到md5,我们就要引用新的文件了

import hashlib

至于md5的用法,可以看下:

import hashlib
 
 
hash = hashlib.md5()#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来
hash.update(bytes('admin',encoding='utf-8'))#要对哪个字符串进行加密,就放这里
print(hash.hexdigest())#拿到加密字符串
# hash2=hashlib.sha384()#不同算法,hashlib很多加密算法
# hash2.update(bytes('admin',encoding='utf-8'))
# print(hash.hexdigest())
 
 
hash3 = hashlib.md5(bytes('abd',encoding='utf-8'))
''' 如果没有参数,所有md5遵守一个规则,生成同一个对应关系,如果加了参数,
就是在原先加密的基础上再加密一层,这样的话参数只有自己知道,防止被撞库,
因为别人永远拿不到这个参数
'''
hash3.update(bytes('admin',encoding='utf-8'))
print(hash3.hexdigest())

然后我们把sign的加密写一下

sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16]

再把sign拼接到url上

sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16]
url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba'
url = url+'&sign='+sign

然后我们运行下看看

详解python使用金山词霸的翻译功能(调试工具断点的使用)

一切OK,没问题!
最后我们从返回的json数据里提取出我们要的那部分

rt= res['content']['out']
print('翻译完成:'+rt)

全部代码就是

import requests
import hashlib

q = input('请输入要翻译的内容:')

headers = {
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
 }


url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba'
sign = (hashlib.md5(("6key_cibaifanyicjbysdlove1"+q).encode('utf-8')).hexdigest())[0:16]
url = url+'&sign='+sign

data = {
 'from':'auto',
 'to':'auto',
 'q':q
  }

res = requests.post(url=url,headers=headers,data=data).json()

rt= res['content']['out']
print('翻译完成:'+rt)

运行看下:

详解python使用金山词霸的翻译功能(调试工具断点的使用)

OK,翻译完工!

总结:
post请求的所有data都是已知的,只有url里有一个动态的sign。麻烦的地方就是查找sign的加密方式。
一般情况下,大部分sign的加密都是使用的md5,你只要找到用来加密的字符串就可以了。
使用断点来跟踪运行过程是比较常用的手段,但也不是全都能找到结果的。

到此这篇关于详解python使用金山词霸的翻译功能(调试工具断点的使用)的文章就介绍到这了,更多相关python金山词霸的翻译内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
python类的继承实例详解
Mar 30 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
python查看数据类型的方法
Oct 12 Python
Python如何根据时间序列数据作图
May 12 Python
对python中list的五种查找方法说明
Jul 13 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 #Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 #Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 #Python
Django权限控制的使用
Jan 07 #Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 #Python
jupyter notebook更换皮肤主题的实现
Jan 07 #Python
You might like
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
JavaScript实现拼音排序的方法
2012/11/20 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Django框架验证码用法实例分析
2019/05/10 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
Keras搭建自编码器操作
2020/07/03 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
品质主管的岗位职责
2013/12/04 职场文书
美德好少年主要事迹
2014/01/29 职场文书
高中军训感言200字
2014/02/23 职场文书
入职担保书怎么写
2014/05/12 职场文书
老干部工作汇报材料
2014/10/28 职场文书
大学生助学金感谢信
2015/01/21 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python