web端的有道翻译,在之前是直接可以爬的。也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用。那么自从有道翻译推出他的API服务的时候,就对这个接口做一个反爬虫机制(如果大家都能免费使用到他的翻译接口,那他的API服务怎么赚钱)。这个反爬虫机制在爬虫领域算是一个非常经典的技术手段。那么他的反爬虫机制原理是什么?如何破解?接下来带大家一探究竟。

一、正常的爬虫流程:

如果你要爬取他的翻译接口,这个流程还是不能少的。首先我们打开有道翻译的链接:http://fanyi.youdao.com/。然后在页面中右键->检查->Network项。这时候就来到了网络监听窗口,以后你在这个页面中发送的所有网络请求,都会在Network这个地方显示出来。接着我们在翻译的窗口输入我们需要翻译的文字,比如输入hello。然后点击自动翻译按钮,那么接下来在下面就可以看到浏览器给有道发送的请求,这里截个图看看:

01.png

在上图,我们可以看到发送了很多的网络请求,这里我们点击第一个网络请求进行查看:

02.png

可以看到,我们在点击自动翻译的时候,发送的请求就是上图中Request URL的那个URL,然后我们再点击那个Response,我们可以看到返回的结果:

03.png

并且,现在我们再回到Headers的地方,然后滚动到最下面,可以看到有一个Form Data的地方,这个下面展示了许多的数据,这些数据就是你在点击翻译的时候浏览器给服务器发送的数据:

04.png

对其中几个比较重要的数据进行解释:

  • i:需要进行翻译的字符串,这个地方我们输入的是hello。
  • salt:加密用到的盐。这个是我们破解有道反爬虫机制的关键点,后面会讲到。
  • sign:签名字符串。也是破解反爬虫机制的关键点。

其他的数据类型暂时就不怎么重要了,都是固定写法,我们后面写代码的时候直接鞋子就可以了。到现在为止,我们就可以写一个简单的爬虫,去调用有道翻译的接口了。这里我们使用的网络请求库是Python3自带的urllib,相关代码如下:

# 导入需要的库
import urllib.request
import urllib.parse
import json# 等待用户输入需要翻译的单词
content = input('请输入需要翻译的单词:')# 有道翻译的url链接
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null'# 发送给有道服务器的数据
data = {}# 需要翻译的文字
data['i'] = content
# 下面这些都先按照我们之前抓包获取到的数据
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1500349255670'
data['sign'] = '997742c66698b25b43a3a5030e1c2ff2'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CL1CKBUTTON'
data['typoResult'] = 'true'# 对数据进行编码处理
data = urllib.parse.urlencode(data).encode('utf-8')# 创建一个Request对象,把url和data传进去,并且需要注意的使用的是POST请求
request = urllib.request.Request(url=self.url, data=data, method='POST')
# 打开这个请求
response = urllib.request.urlopen(request)
# 读取返回来的数据
result_str = response.read().decode('utf-8')
# 把返回来的json字符串解析成字典
result_dict = json.loads(result_str)# 获取翻译结果
print('翻译的结果是:%s' % result_dict)

我们运行这个文件后,当我们输入的是hello的时候,我们可以得到哈罗的这个正确的翻译结果。而当我们输入其他需要翻译的字符串的时候,比如输入i love you,那么就会得到一个错误代码{"errorCode":50}。这就奇怪了,有道词典不可能只能翻译一个英文单词吧。而这个,就是有道词典的反爬虫机制。接下来我们就来破解有道词典的反爬虫机制。

二、破解反爬虫机制:

我们可以多次的进行翻译,并且每次翻译后都去查看翻译的时候发送的这个网络请求,比较每次翻译时候发送的Form Data的值。我们注意到,Form Data在每次发送网络请求的时候,只有isalt以及sign这三个是不同的,其他的数据都是一样的,这里我用helloworld两个单词翻译时候Form Data的数据进行比较:

05.png

06.png

图中的Form Data也证实了我刚刚所说的,就是除了isalt以及sign是不一样的。其余都是一样的。而i不一样是很正常的。因为i代表的是要翻译的字符串,这个不同是很正常。而saltsign这两个东西不一样,是怎么产生的呢?这里我们可以分析一下,这两个值在每次请求的时候都不一样,只有两种情况:第一是每次翻译的时候,浏览器会从有道服务器获取一下这两个值。这样可以达到每次翻译的时候值不同的需求。第二是在本地,用JS代码按照一定的规则生成的。那么我们首先来看第一个情况,我们可以看到在每次发送翻译请求的时候,并没有一个请求是专门用来获取这两个值的:

07.png

所以就可以排除第一种情况。就只剩下一种可能,那就是在本地自己生成的,如果是在本地自己生成的,那么规则是什么呢?这里我们点击网页,查看网页源代码,查找所有的JS文件,我们找到那个fanyi.js

08.png

然后点击这个文件,跳转到这个源文件中,然后全选所有的代码,复制下来,再打开站长工具:http://tool.chinaz.com/Tools/jsformat.aspx。把代码复制进去后,点击格式化:

09.png

然后把格式化后的代码,复制下来,用sublime或者pycharm打开都可以,然后搜索salt,可以找到相关的代码:

10.png

这里我们就可以发现所有的值的生成原理了。这里来做个简介:

  • d:代表的是需要翻译的字符串。

    • f:当前时间的时间戳加上0-10的随机字符串。
    • u:一个常量——fanyideskweb
    • c:一个常量——rY0D^0'nM0}g5Mm1z%1G4
    • salt:就是f变量,时间戳。
    • sign:使用的是u + d + f + cmd5的值。

知道saltsign的生成原理后,我们就可以写Python代码,来对接他的接口了,以下是相关代码:

import urllib.requestimport urllib.parse
import json
import time
import random
import hashlibcontent = input('请输入需要翻译的句子:')url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=https://www.google.com/'data = {}u = 'fanyideskweb'
d = content
f = str(int(time.time()*1000) + random.randint(1,10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4'sign = hashlib.md5((u + d + f + c).encode('utf-8')).hexdigest()data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = f
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CL1CKBUTTON'
data['typoResult'] = 'true'data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url,data=data,method='POST')
response = urllib.request.urlopen(request)print(response.read().decode('utf-8'))

写在最后:

像以上这种,通过用JS在本地生成随机字符串的反爬虫机制,在爬虫的时候是经常会遇到的一个问题。希望通过以上的讲解,能为大家提供一种思路。以后再碰到这种问题的时候知道该如何解决。这样本篇文章的目的也就达到了。如果您想深入学习Python爬虫和数据分析。可以看下这个课程,讲解很仔细,你一定不会失望的:21天搞定Python分布式爬虫

Python(4) 用Python破解有道翻译反爬虫机制相关推荐

  1. 用Python破解有道翻译反爬虫机制

    破解有道翻译反爬虫机制 web端的有道翻译,在之前是直接可以爬的.也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用.那么自从有道翻译推出他的API服务的时候,就 ...

  2. python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制

    本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常 ...

  3. 如何利用 C# + Python 破解猫眼电影的反爬虫机制?

    在 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息! 这篇图文中可以看到猫眼电影对"本月新增想看人数" 和 "总想看人数"进行了字符集加密. 在 如 ...

  4. 从头学习爬虫(四十)高阶篇----模拟js生成Cookie中__jsl_clearance来破解加速乐的反爬虫机制

    本文主要提供中间模拟生成Cookie中__jsl_clearance字段来破解加速乐的反爬虫机制 前后通过postman模拟代替代码实现 一 需求 http://www.cyicai.com/info ...

  5. python破解网易反爬虫机制

    用python3 urllib破解有道翻译反爬虫机制 前言 最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果.发现接口变化很大, ...

  6. python爬虫之基于JS加密破解--有道翻译/百度翻译

    有道翻译破解案例(post) 目标 破解有道翻译接口,抓取翻译结果 # 结果展示 请输入要翻译的词语: elephant 翻译结果: 大象 ************************** 请输入 ...

  7. Python有道翻译爬虫,破解反爬虫机制,解决{errorCode:50}错误

    一.引言 参考网址:https://tendcode.com/article/youdao-spider/ 当前成功时间:2019-6-28 转自个人开源博客:https://my.oschina.n ...

  8. 有道翻译反反爬虫(python)

    有道翻译反反爬虫(python) 该博客创作于2021/6/30,之后有失效可能 作为一个初学者,花两天时间破解了有道翻译的反爬虫系统,故为之文以记之. 参考文章:博客1博客2 以上博客均已失效但有助 ...

  9. 使用Python爬取简单的有道翻译功能

    python有道翻译功能简单的爬取 首先点开有道翻译官网,审查元素查看Network一栏,输入翻译内容获取translate信息(真正用到翻译功能的就是这个URL) 添加headers信息,代码如下 ...

最新文章

  1. 【工具类】遍历扫描目录下全部文件并列出
  2. rsync+inotify一键安装脚本
  3. spring是如何管理 事务的
  4. layui弹出层:皮肤扩展(文档解读)
  5. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课0.8节编辑描边
  6. 使用.NET System.IO.Pipelines和Kestrel套接字库创建Redis客户端
  7. 【李宏毅2020 ML/DL】P106 More about Life Long Learning
  8. idea在Sonar中点击exclude后恢复
  9. Everything文件搜索工具
  10. 金盾2016(正阳版)播放器机器码替换
  11. lldp协议代码阅读_LLDP - 小蚂蚁_CYJ - 博客园
  12. Topaz Sharpen AI 人工智能锐化插件
  13. 操作系统15----80386处理器基础
  14. 线性代数的本质(Essense of Linear Algebra)——3Blue1Brown
  15. 神经网络matlab 验证集,机器学习中训练集、验证集、测试集的定义和作用
  16. 美图秀秀修复背光照 瞬间让你光彩照人
  17. Linux 管道 管道命令 命名管道
  18. VMware虚拟网络交换机的优点和缺点
  19. 为什么跑椭圆机比跑步更累
  20. 值得收藏的130个神奇的网站

热门文章

  1. vue实现excel表格下载
  2. mysql查询每门功课成绩最好的前两名_用一个SQL查询语句得出每门功课成绩最好的前两名 - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  3. Chrome插件:拦截页面请求
  4. 如何解决浏览器弹出窗口的拦截
  5. 一举两得!Mac上安装双系统,你值得拥有
  6. 井通区块链Api订阅服务介绍
  7. 浅谈软件人机界面设计
  8. 计算机在3d打印发挥的作用,七大优势汇总 看3D打印的路到底能走多远
  9. 奇虎360可以干大事
  10. 有一门课不及格的学生