python使用金山词霸的翻译功能(调试工具断点的使用)
今天试着用python获取金山词霸的翻译功能,链接在这里:
ICIBA传送门
打开之后,界面是这样的,还是比较干净的。
按F12,打开调试工具,选择Network,找到XHR
这里就是查看网络传输的内容。XHR就是不刷新页面的网络传输,就是常说的ajax(阿贾克斯,像是希腊神话里的名字……)。
然后我们在翻译窗口写点儿内容,然后点翻译
看,左边的页面出现了翻译结果,右边调试窗口出现了两条数据传输。
两条?那我们选哪条呢?点开看看……
哦,天哪~两条都是一样的,那我们随便选一条就可以了。
点一下,看后面的内容
好了,首先看到的是Request URL。嗯……就是我们要的URL了。
先记下来……
(你是用复制、粘贴,还是键盘上手打?难道是抄在本子上?)
下面的Post也要记住,这是请求类型,别用成get了。
再往下,
上面那部分是不是很熟悉?对了,就是URL链接里的东西。不管他,URL里有了就好了。
下面的部分,就是要提交的数据了。
把这部分转成字典格式:
data = {'from':'zh''to':'en''q':'风'
}
from和to这就好理解了,就是从中文到英文嘛。好,咱们不管他是中是英,都给成“auto”,让他自己去猜去……
q就是我们查的词语,那我们就用变量q表示吧,这样改后的字典就是:
data = {'from':'auto''to':'auto''q':q
}
提交的数据有了,那我们把请求头建立起来吧
再让我们回到调试工具里去看下
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的。
这里把返回的结果给你了,这就是json的数据格式。
我们用q来获取输入的文本
q = input('请输入要翻译的内容:')
整理后就是这样了:
import requestsq = 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)
好了,运行一遍试下
我们输入要翻译的内容,
不错,结果返回了,是json格式的数据,里面有我们需要的结果。
再换个词试下……
这是什么情况?为什么错了?
好吧,我们在浏览器里试下
点开看一下……
发现了吗?sign不一样……
前一个是什么?
sign=c1b23d3ff9163427'
这个是
sign=4b733a5ea3f4dd5a
sign是动态生成的,怎么办?找生成方法!
我们看这里……
这是运行的代码的位置,我们点进去……
上面老长一行了,怎么办?
看左下角的大括号了吗?点下就会有惊喜!
好棒!已经排列整齐了……
下面就是在这里查找sign的位置了,Ctrl+F,开始搜索
23个结果,一个个看过去……找找哪个比较像加密的……
看,这里是对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是什么鬼?我们来找一下……
好,我们在这一行打个断点,就是在前面的行号上点一下。
看见蓝色的标签了吧,这就是个断点。在运行的时候,运行到这里就会停止,然后把当前状态给你报出来。好了,断点有了,咱们让点下翻译,让他运行下看看
运行到断点时,停止了,并将当前的参数显示了出来。把鼠标放在q上……
所得寺内!原来就是我们要查的词哦……
然后就把他们拼在一起……
"6key_cibaifanyicjbysdlove1"+"云"
可是c()又是什么鬼?好吧,我们看下加密后的结果是什么
这个字符串是不是很眼熟?很像md5不是吗?
好的,那我们找一个md5加密工具试下,把加密前的字符串拼接起来
"6key_cibaifanyicjbysdlove1云"
然后我们放到md5加密工具里,看结果
看这里……
是不是这个?32位加密后的前16位!
我们再验证一下,换一个词查下,我们查下“雨”
我把字符串拼接好
"6key_cibaifanyicjbysdlove1雨"
放到md5工具里看下
是不是一样的?好了,我们知道sign的加密规则了,那我们自己就把这个sign加密。
要用到md5,我们就要引用新的文件了
import hashlib
至于md5的用法,可以看下:
import hashlibhash = 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
然后我们运行下看看
一切OK,没问题!
最后我们从返回的json数据里提取出我们要的那部分
rt= res['content']['out']
print('翻译完成:'+rt)
全部代码就是
import requests
import hashlibq = 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='+signdata = {'from':'auto','to':'auto','q':q}res = requests.post(url=url,headers=headers,data=data).json()rt= res['content']['out']
print('翻译完成:'+rt)
运行看下:
OK,翻译完工!
总结:
post请求的所有data都是已知的,只有url里有一个动态的sign。麻烦的地方就是查找sign的加密方式。
一般情况下,大部分sign的加密都是使用的md5,你只要找到用来加密的字符串就可以了。
使用断点来跟踪运行过程是比较常用的手段,但也不是全都能找到结果的。
python使用金山词霸的翻译功能(调试工具断点的使用)相关推荐
- 文件不能断点 webstorm_详解python使用金山词霸的翻译功能(调试工具断点的使用)...
这篇文章主要介绍了详解python使用金山词霸的翻译功能(调试工具断点的使用),本文给大家介绍得非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 今天试着用python获取金山 ...
- 详解python使用金山词霸的翻译功能(调试工具断点的使用)
在线翻译实现代码如下 import requests import json import hashlibclass ifanyi:def __init__(self,q):self.headers ...
- python微信公众号翻译功能_10分钟教你用Python实现微信翻译机器人
相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思. 今天,利用Python爬虫等知识,教大家打造一个微信下的翻译小助手.好吧,开始干活. 先来看看 ...
- 【小沐学Python】Python实现在线英语翻译功能
文章目录 1.简介 2.在线翻译接口 2.1 Google Translate API 2.2 Microsoft Translator API 2.2.1 开发简介 2.2.2 开发费用 2.2.3 ...
- python微信公众号翻译功能怎么用_Watson使用指南(七)在微信公众号中实现识图作诗功能...
本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流. 目录: 概述 环境准备及相关账号申请 部署Python Flask应用到Bluemi ...
- python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...
距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是一直搞不定,于是 ...
- python微信公众号翻译功能_使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译...
1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...
- python微信公众号翻译功能_自学Python笔记:给微信公众号搭建“成绩查询”功能...
原标题:自学Python笔记:给微信公众号搭建"成绩查询"功能 期末考试 临近年末,全国各地都在上演一场大戏<期末考试>,考完试无论什么样的结果总想尽快看到自己一个学期 ...
- python爬百度翻译-Python爬虫实现百度翻译功能过程详解
首先,需要简单的了解一下爬虫,尽可能简单快速的上手,其次,需要了解的是百度的API的接口,搞定这个之后,最后,按照官方给出的demo,然后写自己的一个小程序 打开浏览器 F12 打开百度翻译网页源代码 ...
- python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例
本文实例讲述了Python通过调用有道翻译api实现翻译功能.分享给大家供大家参考,具体如下: 通过调用有道翻译的api,实现中译英.其他语言译中文 Python代码: # coding=utf-8 ...
最新文章
- 技术引路:机器学习仍大有可为,但方向在哪里?
- linux输入文件后怎么保存不了怎么办,关于linux:输入数据后为什么不能保存VI文件?...
- Linux时间函数札记
- Drools 6.5 :入门程序
- 语言专升本必背代码_广东省 2021 年普通高等学校专升本招生学科门类与专业基础课对应表...
- proxy_cfw全局代理_浏览器代理配置(chromium based(edge)/firefox/IDM)
- 谷歌Android UI设计技巧
- 移动设备管理与OMA DM 协议 V5(3)
- Redis的使用场景及其介绍
- docker镜像完全卸载
- 使用Jimi处理图像
- 【AirPlay2开发】协议整合
- jetson nano yolov5部署及USB摄像头实时检测 初次尝试
- 《WEB性能测试实战》之WEB性能测试分析
- Arduino从零开始学习(一)
- MySQL增加新的分区
- Android之增量更新详解
- Linux服务器上http更换https证书
- 基于macd、kdj、ma技术指标分析股票多空方向——应用开发4 分析技术指标一系列形态结果
- PLC与步科HMI通信连接(RS232)
热门文章
- java opennlp_java-使用openNLP maxent的训练模型
- 网络图片爬虫(几个简单步骤实现网页图片的爬取,详细步骤,超详细,简单易懂)
- 32位操作系统电脑上的打印机如何共享给64位操作系统的电脑想要使用_hudingyin_新浪博客
- 操作系统应用阶层现状,对操作系统的认识
- 列表、元组、字典、集合的基本使用和相关函数,基础的文件操作
- Word/excel/df文档转图片返回前端
- 项目Kick Off的作用
- 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距
- 个人所得税计算器(简易)
- 【实用网址】:平常用不到,想用的时候找不到