用Python破解有道翻译反爬虫机制
破解有道翻译反爬虫机制
web端的有道翻译,在之前是直接可以爬的。也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用。那么自从有道翻译推出他的API服务的时候,就对这个接口做一个反爬虫机制(如果大家都能免费使用到他的翻译接口,那他的API服务怎么赚钱)。这个反爬虫机制在爬虫领域算是一个非常经典的技术手段。那么他的反爬虫机制原理是什么?如何破解?接下来带大家一探究竟。
一、正常的爬虫流程:
如果你要爬取他的翻译接口,这个流程还是不能少的。首先我们打开有道翻译的链接:http://fanyi.youdao.com/。然后在页面中右键->检查->Network项。这时候就来到了网络监听窗口,以后你在这个页面中发送的所有网络请求,都会在Network这个地方显示出来。接着我们在翻译的窗口输入我们需要翻译的文字,比如输入hello。然后点击自动翻译按钮,那么接下来在下面就可以看到浏览器给有道发送的请求,这里截个图看看:
在上图,我们可以看到发送了很多的网络请求,这里我们点击第一个网络请求进行查看:
可以看到,我们在点击自动翻译的时候,发送的请求就是上图中Request URL的那个URL,然后我们再点击那个Response,我们可以看到返回的结果:
并且,现在我们再回到Headers的地方,然后滚动到最下面,可以看到有一个Form Data的地方,这个下面展示了许多的数据,这些数据就是你在点击翻译的时候浏览器给服务器发送的数据:
对其中几个比较重要的数据进行解释:
i:需要进行翻译的字符串,这个地方我们输入的是hello。
salt:加密用到的盐。这个是我们破解有道反爬虫机制的关键点,后面会讲到。
sign:签名字符串。也是破解反爬虫机制的关键点。
其他的数据类型暂时就不怎么重要了,都是固定写法,我们后面写代码的时候直接鞋子就可以了。到现在为止,我们就可以写一个简单的爬虫,去调用有道翻译的接口了。这里我们使用的网络请求库是Python3自带的urllib,相关代码如下:
我们运行这个文件后,当我们输入的是hello的时候,我们可以得到哈罗的这个正确的翻译结果。而当我们输入其他需要翻译的字符串的时候,比如输入i love you,那么就会得到一个错误代码{“errorCode”:50}。这就奇怪了,有道词典不可能只能翻译一个英文单词吧。而这个,就是有道词典的反爬虫机制。接下来我们就来破解有道词典的反爬虫机制。
二、破解反爬虫机制:
我们可以多次的进行翻译,并且每次翻译后都去查看翻译的时候发送的这个网络请求,比较每次翻译时候发送的Form Data的值。我们注意到,Form Data在每次发送网络请求的时候,只有i和salt以及sign这三个是不同的,其他的数据都是一样的,这里我用hello和world两个单词翻译时候Form Data的数据进行比较:
图中的Form Data也证实了我刚刚所说的,就是除了i、salt以及sign是不一样的。其余都是一样的。而i不一样是很正常的。因为i代表的是要翻译的字符串,这个不同是很正常。而salt和sign这两个东西不一样,是怎么产生的呢?这里我们可以分析一下,这两个值在每次请求的时候都不一样,只有两种情况:第一是每次翻译的时候,浏览器会从有道服务器获取一下这两个值。这样可以达到每次翻译的时候值不同的需求。第二是在本地,用JS代码按照一定的规则生成的。那么我们首先来看第一个情况,我们可以看到在每次发送翻译请求的时候,并没有一个请求是专门用来获取这两个值的:
所以就可以排除第一种情况。就只剩下一种可能,那就是在本地自己生成的,如果是在本地自己生成的,那么规则是什么呢?这里我们点击网页,查看网页源代码,查找所有的JS文件,我们找到那个fanyi.js:
然后点击这个文件,跳转到这个源文件中,然后全选所有的代码,复制下来,再打开站长工具:http://tool.chinaz.com/Tools/jsformat.aspx。把代码复制进去后,点击格式化:
然后把格式化后的代码,复制下来,用sublime或者pycharm打开都可以,然后搜索salt,可以找到相关的代码:
这里我们就可以发现所有的值的生成原理了。这里来做个简介:
d:代表的是需要翻译的字符串。
f:当前时间的时间戳加上0-10的随机字符串。
u:一个常量——fanyideskweb。
c:一个常量——rY0D^0’nM0}g5Mm1z%1G4。
salt:就是f变量,时间戳。
sign:使用的是u + d + f + c的md5的值。
知道salt和sign的生成原理后,我们就可以写Python代码,来对接他的接口了,以下是相关代码:
写在最后:
像以上这种,通过用JS在本地生成随机字符串的反爬虫机制,在爬虫的时候是经常会遇到的一个问题。希望通过以上的讲解,能为大家提供一种思路。以后再碰到这种问题的时候知道该如何解决。
更多干货内容,欢迎关注公众号:知了python
用Python破解有道翻译反爬虫机制相关推荐
- Python(4) 用Python破解有道翻译反爬虫机制
web端的有道翻译,在之前是直接可以爬的.也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用.那么自从有道翻译推出他的API服务的时候,就对这个接口做一个反爬虫机 ...
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
在 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息! 这篇图文中可以看到猫眼电影对"本月新增想看人数" 和 "总想看人数"进行了字符集加密. 在 如 ...
- python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制
本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常 ...
- 从头学习爬虫(四十)高阶篇----模拟js生成Cookie中__jsl_clearance来破解加速乐的反爬虫机制
本文主要提供中间模拟生成Cookie中__jsl_clearance字段来破解加速乐的反爬虫机制 前后通过postman模拟代替代码实现 一 需求 http://www.cyicai.com/info ...
- 【Python】有道翻译的爬虫实现(后篇)
前面说到,有道翻译和百度翻译不同 (百度翻译是模拟iPhone手机,可能百度翻译用Pc端也会有类似的问题,有道翻译的User-Agent是Pc端) 每一次的salt和sign都不一样,这是什么原因产生 ...
- 【Python】有道翻译的爬虫实现(前篇)
import requestsimport jsonurl ="http://fanyi.youdao.com/translate_o?smartresult=dict&smartr ...
- python破解网易反爬虫机制
用python3 urllib破解有道翻译反爬虫机制 前言 最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果.发现接口变化很大, ...
- 【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制
( ̄▽ ̄)~*又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构. 升级后网站的层次结构并没有太多变化,表面上是国家企业信用信 ...
- Python有道翻译爬虫,破解反爬虫机制,解决{errorCode:50}错误
一.引言 参考网址:https://tendcode.com/article/youdao-spider/ 当前成功时间:2019-6-28 转自个人开源博客:https://my.oschina.n ...
最新文章
- 一个狠招|如何高效学习3D视觉
- 参会邀请 | “新时代与新范式:新兴交叉学科的研究议程与发展路径”——第三届全国计算社会科学高端论坛...
- linux c 环境变量函数 getenv putenv 简介
- 15 个变量和方法命名的最佳实践
- 2019.05.15
- PHP中用于精确计算的bcmath扩展
- 设计模式(三)--观察者模式
- powershell实现设置程序相关性脚本
- ios framework 找不到.h_找不到好看的壁纸?上万张「高清壁纸」,都在iOS捷径里...
- 用Crossdev安装MIPS交叉编译工具链
- 经典面试题(35):以下代码将输出的结果是什么?
- C语言学习笔记---打印函数printf()和sprintf()函数
- gitee创建ssh公钥
- 执行cmd并获得结果_用JAVA执行CMD命令备份PG数据库,解决需要口令的问题
- ORACLE 数据库的级联查询 一句sql搞定(部门多级)
- 联想l430主板图纸_【有图】Thinkpad L430升级内存,点亮,成功实现双通道!附详细教程及评测!!!...
- RPM包安装MYSQL
- 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!...
- 三星Galaxy之父×××网秦,网秦安全能否脱胎换骨?
- 微信小程序登录功能wx.login