1. 实例描述
在平时编程的过程中,会经常在网上翻译一些单词,本文使用Python制作一款翻译小工具,不仅可以自己用,还可以嵌入到程序当中。运行程序,效果如下图所示,在文本框输入英文或中文,单击 翻译
按钮即可翻译,并将翻译内容显示在下面的文本框中。单击 保存
按钮将输入内容和翻译内容保存到文本文件中以便日后复习。单击 清空
按钮,将清除文本框中的内容。
2. 技术要点
利用 requests
模块获取 有道词典web
页面的 post
信息,获取需要的内容,通过 tkinter
模块生成窗口界面,使用文件读写方法将内容保存到文本文件中。
2.1 有道词典这样的 JS 混淆加密应该怎么破
嘿嘿嘿,本文需要说说一些爬虫过程中需要斗智斗勇的事情了,这次咱们就来说说关于一些 JS
混淆加密的事。所谓 JS
,就是 JavaScript
,一种前端的脚本语言,一般情况下每个网站都需要 JS
来做一些数据交互,页面渲染等一些异步操作。当然,对于反爬的人来说,JS
的用处还可以用来对一些数据进行加密。
今天咱们就以有道词典这个在线翻译的网站为例,看看他们是如何加密请求数据的,以及笔者是如何通过 Python
模拟请求从而获得关键数据的。
点击 此处 打开有道翻译的网站:
输入中文然后点击翻译按钮就会翻译出来英文,比如:
接着我们打开开发者工具,按下 F12
来抓一下数据,当我们点击翻译的时候,可以看到有了一个请求:
点进去看可以发现,POST
请求的地址是:
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
我们再来看一下请求过去携带的参数是啥:
可以看到,还是需要挺多参数的,其中的 i
就是我们要翻译的内容,那简单啊~想要得到翻译后
的数据,那么我们直接把请求头和所需参数的值复制一下,然后用 requests
请求一波不就搞定了?运行一波,返回的是错误码。
我们再点多几次翻译按钮,然后就可以看到有多次请求。
可以发现,每一次的请求中的 salt
、sign
、lts
、bv
参数是会一直变化的。
我们回到NetWork
,我们看到 Initiator
这一栏,可以看到它请求到了 fanyi.min.js:1
这个 js 文件。
我们就点 fanyi.min.js:1
进去看看,牛的一比,直接看不懂…还好,左下角有一个 {}
,可以点一下,发现有惊喜,直接帮我们把压缩的 js
代码格式化。
牛逼不,行号都给我们显示出来了,不过到了这里,依然懵逼,我们还是不知道怎么拿到 salt
、sign
、lts
、bv
这些参数的值…咋办?恩,Chrome
浏览器的打断点功能在这个时候就要派上用场。那么如何使用断点功能呢,我们看到 Chrome
的右边是这样的:
看到这个 XHR/fetch BreakPoints
没,在这里我们可以添加 url
,根据请求这个 url
打断点。而我们要打的断点就是一开始获取到的请求 url
: