详解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 相关文章推荐
Python采集腾讯新闻实例
Jul 10 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
Django如何实现密码错误报错提醒
Sep 04 Python
python map比for循环快在哪
Sep 21 Python
python爬虫筛选工作实例讲解
Nov 23 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 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
模仿OSO的论坛(一)
2006/10/09 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
php实现Session存储到Redis
2015/11/11 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
js style动态设置table高度
2014/10/21 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python中的自定义函数学习笔记
2014/09/23 Python
Python秒算24点实现及原理详解
2019/07/29 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
大学自主招生自荐信
2013/12/16 职场文书
倡议书格式
2014/04/14 职场文书
软件项目实施计划书
2014/05/02 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
社区禁毒工作方案
2014/06/02 职场文书
法人任命书范本
2014/06/04 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Win11快速关闭所有广告推荐
2022/04/19 数码科技