您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

JS逆向方法论-反爬虫的四种常见方式

时间:2020-01-17 11:15:26  来源:  作者:

现在的网页代码搞得越来越复杂,除了使用vue等前端框架让开发变得容易外,主要就是为了防爬虫,所以写爬虫下的功夫就越来越多。攻和防在互相厮杀中结下孽缘却又相互提升着彼此。

本文就JS反爬虫的策略展开讨论,看看这中间都有着怎样的方法破解。

JS逆向方法论-反爬虫的四种常见方式

 

一 、JS写cookie

我们要写爬虫抓某个网页里面的数据,无非是打开网页,看看源代码,如果html里面有我们要的数据,那就简单了。用requests请求网址得到网页源代码然后解析提取。

等等!requests得到的网页是一对JS,跟浏览器打开看到的网页源码完全不一样!这种情况,往往是浏览器运行这段JS生成一个(或多个)cookie再带着这个cookie做二次请求。服务器那边收到这个cookie就认为你的访问是通过浏览器过来的合法访问。

其实,你在浏览器(chrome、Firefox都可以)里可以看到这一过程。首先把Chrome浏览器保存的该网站的cookie删除,按F12到Network窗口,把“preserve log”选中(Firefox是“Persist logs”),刷新网页,这样我们就可以看到历史的Network请求记录。比如下图:

JS逆向方法论-反爬虫的四种常见方式

 

第一次打开“index.html”页面时返回的是521, 内容是一段JS代码;第二次请求这个页面就得到了正常的HTML。查看两次请求的cookies,可以发现第二次请求时带上了一个cookie,而这个cookie并不是第一次请求时服务器发过来的。其实它就是JS生成的。

对策就是,研究那段JS,找到它生成cookie的算法,爬虫就可以解决这个问题。

 

二、JS加密ajax请求参数

写爬虫抓某个网页里面的数据,发现网页源代码里面没有我们要的数据,那就有点麻烦了。那些数据往往是ajax请求得到的。但是也不用怕,按F12打开Network窗口,刷新网页看看加载这个网页都下载了哪些URL,我们要的数据就在某个URL请求的结果里面。这类URL在Chrome的Network里面的类型大多是XHR。通过观察它们的“Response”就可以发现我们要的数据。

然而事情往往不是这么顺利,这个URL包含很多参数,某个参数是一串看上去无意义的字符串。这个字符串很可能是JS通过一个加密算法得到的,服务器也会通过同样的算法进行验证,验证通过了才认为你这是从浏览器来的请求。我们可以把这个URL拷贝到地址栏,把那个参数随便改个字母,访问一下看看是不是能得到正确的结果,由此来验证它是否是很重要的加密参数。

对于这样的加密参数,对策是通过debug JS来找到对应的JS加密算法。其中关键的是在Chrome里面设置“XHR/fetch Breakpoints”。

JS逆向方法论-反爬虫的四种常见方式

 

 

三、JS反调试(反debug)

前面我们都用到了Chrome 的F12去查看网页加载的过程,或者是调试JS的运行过程。这种方法用多了,网站就加了反调试的策略,只有我们打开F12,就会暂停在一个“debugger”代码行,无论怎样都跳不出去。它看起来像下面这样:

JS逆向方法论-反爬虫的四种常见方式

 

不管我们点击多少次继续运行,它一直在这个“debugger”这里,每次都会多出一个VMxx的标签,观察“Call Stack”发现它好像陷入了一个函数的递归调用。这个“debugger”让我们无法调试JS。但是关掉F12窗口,网页就正常加载了。

解决这种JS反调试的方法我们称之为“反-反调试”,其策略是:通过“Call Stack”找到把我们带入死循环的函数,重新定义它。

这样的函数几乎没有任何其它功能只是给我们设置的陷阱。我们可以把这个函数在“Console”里面重新定义,比如把它重新定义为空函数,这样再运行它时就什么都不做,也就不会把我们带人陷阱。在这个函数调用的地方打个“Breakpoint”。因为我们已经在陷阱里面了,所以要刷新页面,JS的运行应该停止在设置的断点处,此时该函数尚未运行,我们在Console里面重新定义它,继续运行就可以跳过该陷阱。

 

四、JS发送鼠标点击事件

还有些网站,它的反爬都不是上面的方式。你从浏览器可以打开正常的页面,而在requests里面却被要求输入验证码或重定向其它网页。起初你可能一头雾水,但不要怕,认真看看“Network”或许能发现些线索。比如下面这个Network流里面的信息:

JS逆向方法论-反爬虫的四种常见方式

 

认真观察后发现,每点击页面的的链接,它都会做一个“cl.gif”的请求,它看上去是下载一个gif图片,然而并不是。它请求时发送的参数非常多,而且这些参数都是当前页面的信息。比如包含了被点击的链接等等。

我们先来梳理一下它的逻辑。JS会响应链接被点击的事件,在打开链接前,先访问cl.gif,把当前的信息发送给服务器,然后再打开被点击的链接。服务器收到被点击链接的请求,会看看之前是不是已经通过cl.gif把对应信息发过来,如果发过来了就认为是合法的浏览器访问,给出正常的网页内容。

因为requests没有鼠标事件响应就没有访问cl.gif的过程就直接访问链接,服务器就拒绝服务。

明白了这个过程,我们不难拿出对策,几乎不需要研究JS内容(JS也有可能对被点击链接进行修改哦)就可以绕过这个反爬策略,无非是在访问链接前先访问一下cl.gif即可。关键是要研究cl.gif后的参数,把这些参数都带上就万事大吉啦。

 

结尾

爬虫和网站是一对冤家,相克相生。爬虫知道了反爬策略就可以做成响应的反-反爬策略;网站知道了爬虫的反-反爬策略就可以做一个“反-反-反爬”策略……道高一尺魔高一丈,两者的斗争也不会结束。



Tags:爬虫   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
本篇文章介绍了爬虫中验证码的处理方式, 并把这些功能封装起来,供我们使用, 涉及到百度AIP的调用方式, 以及一个最新的开源库muggle识别库的使用,欢迎阅读,点赞,收藏! 目录: 学会调用...【详细内容】
2020-10-29   爬虫  点击:(4)  评论:(0)  加入收藏
在写爬虫的时候,为了效率我们通常会选择解析网页api来获取数据,但是有时候解析方式比较困难,或者我们纯粹是为了快速实现爬虫,会使用浏览器自动化操作,说起这一点,肯定第一个想到...【详细内容】
2020-10-27   爬虫  点击:(4)  评论:(0)  加入收藏
国内一位开发者在 GitHub 上开源了个集众多数据源于一身的爬虫工具箱——InfoSpider,一不小心就火了!!!有多火呢?开源没几天就登上GitHub周榜第四,标星1.3K,累计分支172...【详细内容】
2020-10-23   爬虫  点击:(5)  评论:(0)  加入收藏
爬虫原理我是一个爬虫,每天穿行于互联网之上,爬取我需要的一切。 说起来还要感谢HTTP协议,因为它,全世界的网站和浏览器才能够连接通信,而我也是借助HTTP协议,获取我想要的数据。...【详细内容】
2020-10-10   爬虫  点击:(5)  评论:(0)  加入收藏
布隆过滤器(BloomFilter)类似于hash set,用来判断元素是否在集合中。但是与hash set区别是:布隆过滤器不需要存储元素值,就能判断元素是否在集合中。说一下布隆过滤器优缺点: 优点...【详细内容】
2020-09-29   爬虫  点击:(8)  评论:(0)  加入收藏
我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。1. 本节目标私信小编01即可获取大量的Python学习资料本节将讲解以 GitHub...【详细内容】
2020-09-27   爬虫  点击:(7)  评论:(0)  加入收藏
大家好,今天我们来讲点Selenium自动化,你是否有特别喜欢的公众号?你有想过如何将一个公众号历史文章全部文章爬下来学习吗?现在我们就演示用Selenium实现这个功能。...【详细内容】
2020-09-25   爬虫  点击:(7)  评论:(0)  加入收藏
网络数据抓取是大数据分析的前提,只有拥有海量的数据才能够进行大数据分析,因此,爬虫(数据抓取)是每个后端开发人员必会的一个技能,下面我们主要盘点一下php的爬虫框架。GoutteGou...【详细内容】
2020-09-16   爬虫  点击:(7)  评论:(0)  加入收藏
今年初,大名鼎鼎的VISA宣布以53亿美元的价格收购一家名为Plaid的金融科技公司。 值得注意的是,Plaid在一年前完成C轮融资时,估值为26.5亿美元,也就是说VISA不惜花两倍的价格也...【详细内容】
2020-09-10   爬虫  点击:(2)  评论:(0)  加入收藏
作者 | HelloGitHub-秦人来源 | HelloGitHub(ID:GitHub520)HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版一款网页元素解析框架——jsoup,...【详细内容】
2020-09-08   爬虫  点击:(1)  评论:(0)  加入收藏
在开始之前,请确保你的电脑上已经安装好了BeautifulSoup库,可以通过在命令行中输入pip install beautifulsoup4来进行安装。一、数据解析在爬取之前,我们需要检测下响应状态码...【详细内容】
2020-08-25   爬虫  点击:(2)  评论:(0)  加入收藏
每天一个爬虫练习,爬个比较简单的网站import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport timedef get_data(url): resp = requests.get(url) h...【详细内容】
2020-08-24   爬虫  点击:(2)  评论:(0)  加入收藏
为什么要做网络爬虫?首先请问:都说现在是"大数据时代",那数据从何而来?企业产生的用户数据:百度指数、阿里指数、TBI腾讯浏览指数、新浪微博指数数据平台购买数据:数据堂、国云数...【详细内容】
2020-08-13   爬虫  点击:(8)  评论:(0)  加入收藏
此教程需要有一定的HTML基础,了解HTML结构和标签即可,先写一个简单的 HTML通过编写和修改 HTML,可以更好地理解 HTML。首先打开一个记事本,然后输入下面的内容:<html><head><titl...【详细内容】
2020-08-12   爬虫  点击:(6)  评论:(0)  加入收藏
Chrome官方网站已经说的很清楚,不再支持6.x的CentOS,至少7以上。 可是很多时候我们使用的服务器版本并不能随便升级,即便已经很难受了,但是还得继续使用低版本,装起来那是真叫一...【详细内容】
2020-08-10   爬虫  点击:(4)  评论:(0)  加入收藏
一、使用的工具单独使用完成 pycharms 完成实验,在分析的时候使用 Jupyter Notebook在爬虫所需要lxml和bs4这两个库已经确认安装后,确保自己的已经安装了pandas和matplotlib这...【详细内容】
2020-08-05   爬虫  点击:(5)  评论:(0)  加入收藏
互联网的数据爆炸式的增长,而利用 Python 爬虫我们可以获取大量有价值的数据:1.爬取数据,进行市场调研和商业分析爬取知乎优质答案,筛选各话题下最优质的内容; 抓取房产网站买卖...【详细内容】
2020-07-24   爬虫  点击:(8)  评论:(0)  加入收藏
作者 | 李秋键责编 | 晋兆雨头图 | CSDN付费下载自视觉中国在很多的公司项目中,常常有很多对office项目的比较机械化的操作,在这里就可以借助python实现对office的合理排版。...【详细内容】
2020-07-22   爬虫  点击:(3)  评论:(0)  加入收藏
一、爬虫与数据(一)为什么要做爬虫都说现在是大数据时代,但是与之相对应的问题是,大数据中的数据从何而来。可以人工收集数据,但是人工收集数据的效率却免不了太过低下。也可以找...【详细内容】
2020-07-21   爬虫  点击:(5)  评论:(0)  加入收藏
今天我们来介绍近年大火的爬虫工具,需要说明的是,我们今天将主要介绍基于python的专业工具&mdash;&mdash;requests第三方软件包的基本使用,并且有两个实战例子,其他如八爪鱼采...【详细内容】
2020-07-21   爬虫  点击:(2)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条