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

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

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

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

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

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

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

fromto这就好理解了,就是从中文到英文嘛。好,咱们不管他是中是英,都给成“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使用金山词霸的翻译功能(调试工具断点的使用)相关推荐

  1. 文件不能断点 webstorm_详解python使用金山词霸的翻译功能(调试工具断点的使用)...

    这篇文章主要介绍了详解python使用金山词霸的翻译功能(调试工具断点的使用),本文给大家介绍得非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 今天试着用python获取金山 ...

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

    在线翻译实现代码如下 import requests import json import hashlibclass ifanyi:def __init__(self,q):self.headers ...

  3. python微信公众号翻译功能_10分钟教你用Python实现微信翻译机器人

    相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思. 今天,利用Python爬虫等知识,教大家打造一个微信下的翻译小助手.好吧,开始干活. 先来看看 ...

  4. 【小沐学Python】Python实现在线英语翻译功能

    文章目录 1.简介 2.在线翻译接口 2.1 Google Translate API 2.2 Microsoft Translator API 2.2.1 开发简介 2.2.2 开发费用 2.2.3 ...

  5. python微信公众号翻译功能怎么用_Watson使用指南(七)在微信公众号中实现识图作诗功能...

    本文章主要是写一下这个项目开发的过程及之间遇到的问题,作为记录,也希望以此为契机认识志同道合的朋友,一起学习交流. 目录: 概述 环境准备及相关账号申请 部署Python Flask应用到Bluemi ...

  6. python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...

    距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是一直搞不定,于是 ...

  7. python微信公众号翻译功能_使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译...

    1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...

  8. python微信公众号翻译功能_自学Python笔记:给微信公众号搭建“成绩查询”功能...

    原标题:自学Python笔记:给微信公众号搭建"成绩查询"功能 期末考试 临近年末,全国各地都在上演一场大戏<期末考试>,考完试无论什么样的结果总想尽快看到自己一个学期 ...

  9. python爬百度翻译-Python爬虫实现百度翻译功能过程详解

    首先,需要简单的了解一下爬虫,尽可能简单快速的上手,其次,需要了解的是百度的API的接口,搞定这个之后,最后,按照官方给出的demo,然后写自己的一个小程序 打开浏览器 F12 打开百度翻译网页源代码 ...

  10. python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例

    本文实例讲述了Python通过调用有道翻译api实现翻译功能.分享给大家供大家参考,具体如下: 通过调用有道翻译的api,实现中译英.其他语言译中文 Python代码: # coding=utf-8 ...

最新文章

  1. 技术引路:机器学习仍大有可为,但方向在哪里?
  2. linux输入文件后怎么保存不了怎么办,关于linux:输入数据后为什么不能保存VI文件?...
  3. Linux时间函数札记
  4. Drools 6.5 :入门程序
  5. 语言专升本必背代码_广东省 2021 年普通高等学校专升本招生学科门类与专业基础课对应表...
  6. proxy_cfw全局代理_浏览器代理配置(chromium based(edge)/firefox/IDM)
  7. 谷歌Android UI设计技巧
  8. 移动设备管理与OMA DM 协议 V5(3)
  9. Redis的使用场景及其介绍
  10. docker镜像完全卸载
  11. 使用Jimi处理图像
  12. 【AirPlay2开发】协议整合
  13. jetson nano yolov5部署及USB摄像头实时检测 初次尝试
  14. 《WEB性能测试实战》之WEB性能测试分析
  15. Arduino从零开始学习(一)
  16. MySQL增加新的分区
  17. Android之增量更新详解
  18. Linux服务器上http更换https证书
  19. 基于macd、kdj、ma技术指标分析股票多空方向——应用开发4 分析技术指标一系列形态结果
  20. PLC与步科HMI通信连接(RS232)

热门文章

  1. java opennlp_java-使用openNLP maxent的训练模型
  2. 网络图片爬虫(几个简单步骤实现网页图片的爬取,详细步骤,超详细,简单易懂)
  3. 32位操作系统电脑上的打印机如何共享给64位操作系统的电脑想要使用_hudingyin_新浪博客
  4. 操作系统应用阶层现状,对操作系统的认识
  5. 列表、元组、字典、集合的基本使用和相关函数,基础的文件操作
  6. Word/excel/df文档转图片返回前端
  7. 项目Kick Off的作用
  8. 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距
  9. 个人所得税计算器(简易)
  10. 【实用网址】:平常用不到,想用的时候找不到