文章目录
-
- 简单的了解爬虫和反爬虫,
- 1.根据用户行为反爬虫,IP封锁
- 2、通过Header反爬虫
- 3、动态页面的反爬虫
- 4、最为经典的反爬虫策略当属“验证码”了。
- 5、比较普通的反爬虫策略:
- 6、反爬虫模式当属采用JS渲染页面
- 7、在登录部分做手脚
- 8、还有一种反爬虫技术:绑定IP
- 9、把页面全部转换成图片,
- 10、蜜罐技术
简单的了解爬虫和反爬虫,
对于一张 页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它。
而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商 站的交易额,教育 站的题目等。因为这些内容,往往是一个产品的生命线,必须做到有效地保护。这就是爬虫与反爬虫这一话题的由来。
常见反爬虫策略
如果页面希望能在用户面前正常展示,同时又不给爬虫机会,就必须要做到识别真人与机器人。因此工程师们做了各种尝试,这些策略大多采用于后端,也是目前比较常规单有效的手段,比如:
1.根据用户行为反爬虫,IP封锁
常见 站反爬虫首先考虑到会不会对用户产生误伤,举个例子,在校园 内,有台机器对 站持续高频繁产生请求,校园 涉及用户过多,但是如果封锁IP那么会对校园中的用户产生误伤,丧失了许多用户量,就拿某宝那么大的公司来说,不到万不得已时,不会对IP进行长时间或者进行封锁。
还有一部分 站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。
第一种。使用代理池(可以使用flask+redis维护动态代理池)。 上有许多公开的代理ip,可以单独写一个爬虫把这些ip爬取下来,保存好,以后会经常使用。有了大量的ip后请求几次之后就可以更换ip。
第二种。每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的 站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账 短时间内不能多次进行相同请求的限制。
2、通过Header反爬虫
根据用户请求的Headers反爬虫是最常见的反爬虫策略。对于以很低速率爬起 站,难以通过服务器负载统计觉察的爬虫,可以通过User-Agent信息来识别。很多 站都会对Headers的User-Agent进行检测,还有一部分 站会对Referer进行检测(一些资源 站的防盗链就是检测Referer)。
如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者使用selenium+phantomJS 能做的事情太多了,可以好好研究一下。
或者将Referer值修改为目标 站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。
3、动态页面的反爬虫
上面两种反爬虫基本都是在静态页面中出现,但是还有的 站是经过JS渲染的,或者是通过ajax请求得到。
首先用Firebug或者HttpFox对 络请求进行分析。
如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。
能够直接模拟ajax请求获取数据固然是极好的,但是有些 站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。遇到这样的 站,我们就不能用上面的方法了,用的是selenium+phantomJS框架。调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。
用这套框架几乎能绕过大多数的反爬虫,phantomJS就是一个没有界面的浏览器,只是操控这个浏览器的不是人。
4、最为经典的反爬虫策略当属“验证码”了。
因为验证码是图片,用户登录时只需输入一次便可登录成功,而我们程序抓取数据过程中,需要不断的登录,比如我们需要抓取1000个用户的个人信息,则需要填1000次验证码,而手动输入验证码是不现实的,所以验证码的出现曾经难倒了很多 络爬虫工程师。
解决方法:
1)分析 站验证码机制,从 站后台或者前端获取验证码(文本形式),该方法只适用于少量 站,因为一般验证码我们很难拿到。
2)利用图像识别技术,识别验证码文本(例如最近比较火的深度学习Tensorflow等)。
3)往往一些 站不只有pc端,还有手机端 站,很有可能手机端是不包含验证码的。所以不妨试试手机端 站,也许会有意外收获。
5、比较普通的反爬虫策略:
通过cookie限制抓取信息,比如我们模拟登陆之后,想拿到登陆之后某页面信息,千万不要以为模拟登陆之后就所有页面都可以抓了,有时候还需要请求一些中间页面拿到特定cookie,然后才可以抓到我们需要的页面。
解决方法:
1)通过浏览器的F12查看器,观察具体整个过程都请求了哪些URL(主要包括HTML、JS、XHR),挨个试吧,试到成功为止。
6、反爬虫模式当属采用JS渲染页面
什么意思呢,就是返回的页面并不是直接请求得到,而是有一部分由JS操作DOM得到,所以那部分数据我们也拿不到咯。
解决方法:
1)一般JS或者XHR都是请求某个链接得到数据,所以需要我们去对应JS、XHR代码里面分析具体请求了哪个链接,然后采用同样的方式,用程序模拟请求。
2)有一些开源工具包是可以执行js的,例如HtmlUnit,可以试试哦(不过执行起来比较慢,这是缺点)
7、在登录部分做手脚
对用户名或者密码进行加密处理。而我们模拟登陆的时候如果用原始用户名密码的话,肯定登录失败的。
解决方法:
1)一般加密都在某个JS里面,所以只能分析JS,在我们的程序里面进行加密了。
2)用HtmlUnit等开源工具,直接执行JS,直接就可以登录啦。
8、还有一种反爬虫技术:绑定IP
啥意思呢,意思就是整套请求流程必须以一个IP去访问,如果换IP了,对不起,登录失败。
解决办法:
1)没啥解决办法,只能用一个IP登录。。
9、把页面全部转换成图片,
你抓取到的内容全部隐藏在图片里。想提取内容,休想,最恶心最恶心的反爬虫。
解决办法:
1)唯一解决的办法:图像识别吧,但是感觉代价很大。。。
10、蜜罐技术
蜜罐这个词,最早是来自于 络攻防中。一方会故意设置一个或者几个服务器,故意留下漏洞,让另一方轻易的入侵进来。这些被故意设置的服务器,就叫做蜜罐。里面可能安装了监控软件,用来监控入侵者。同时,蜜罐还可以拖延入侵者的时间。
在反爬虫的机制中,也有一种蜜罐技术。 页上会故意留下一些人类看不到或者绝对不会点击的链接。由于爬虫会从源代码中获取内容,所以爬虫可能会访问这样的链接。这个时候,只要 站发现了有IP访问这个链接,立刻永久封禁该IP + User-Agent + Mac地址等等可以用于识别访问者身份的所有信息。这个时候,访问者即便是把IP换了,也没有办法访问这个 站了。给爬虫造成了非常大的访问障碍。
最后说一下,其实反爬虫还是干不过爬虫、没有那个 站会做出百分百的反爬措施
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览211392 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!