反爬虫必备基础知识点

1.为什么要反爬虫?

因为大家都去爬,服务器会吃不消。严重时会造成 DDos攻击。
有位网友的比喻十分形象:甲乙丙丁都在食堂打饭,食堂就一个窗口,甲饭没打完,后面的人就得等着。如果甲帮他们整个年级打饭,那么食堂阿姨就累瘫了(服务器崩溃)。乙丙丁不仅得等,而且等到了也没用。阿姨说我累死了,卖不动了,这饭今天你吃不了了。
其实,说简单点,主要原因有以下两点:
(1)、爬虫占总PV比例较高,这样浪费钱(尤其是三月份爬虫)。
(2)、公司可免费查询的资源被批量抓走,丧失竞争力,这样少赚钱。

2.常见反爬虫措施

(1)、通过 Headers 反爬虫
从用户请求的 Headers 反爬虫是最常见的反爬虫策略。很多网站都会对 Headers 的 User-Agent 进行检测,还有一部分网站会对 Referer 进行检测(一些资源网站的防盗链就是检测 Referer)。如果 遇到了这类反爬虫机制,可以直接在爬虫中添加 Headers,将浏览器的 User-Agent 复制到爬虫的 Headers 中;或者将 Referer 值修改为目标网站域名。对于检测 Headers 的反爬虫,在爬虫中修改或 者添加 Headers 就能很好的绕过。

(2)、基于用户行为反爬虫
还有一部分网站是通过检测用户行为,例如同一 IP 短时间内多次访问同一页面,或者同一账户短时 间内多次进行相同操作。

大多数网站都是前一种情况,对于这种情况,使用 IP 代理就可以解决。可以专门写一个爬虫,爬取 网上公开的代理 ip,检测后全部保存起来。这样的代理 ip 爬虫经常会用到,最好自己准备一个。有了 大量代理 ip 后可以每请求几次更换一个 ip,这在 requests 或者 urllib2 中很容易做到,这样就能很容 易的绕过第一种反爬虫。

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可 以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限 制。

(3)、动态页面的反爬虫
上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过 ajax 请求 得到,或者通过 JavaScript 生成的。首先用 Firebug 或者 HttpFox 对网络请求进行分析。如果能够找 到 ajax 请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用 requests 或者 urllib2 模拟 ajax 请求,对响应的 json 进行分析得到需要的数据。

能够直接模拟 ajax 请求获取数据固然是极好的,但是有些网站把 ajax 请求的所有参数全部加密了。 我们根本没办法构造自己所需要的数据的请求。我这几天爬的那个网站就是这样,除了加密 ajax 参数, 它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。遇到这样的网 站,我们就不能用上面的方法了,我用的是 selenium+phantomJS 框架,调用浏览器内核,并利用 phantomJS 执行 js 来模拟人为操作以及触发页面中的 js 脚本。从填写表单到点击按钮再到滚动页面, 全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一 遍。

用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加 Headers 一定程度上就是为了伪装成浏览器),它本身就是浏览器,phantomJS 就是一个没有界面的 浏览器,只是操控这个浏览器的不是人。利用 selenium+phantomJS 能干很多事情,例如识别点触式 (12306)或者滑动式的验证码,对页面表单进行暴力破解等等。
(4).IP的访问频率被限制
部分访问是存在着恶意性质的,一些平台为了防止这种情况的发生,会在某个同一个IP在单元时间内超过一定的次数的时候,将禁止这个IP继续访问。对于这个限制IP访问效率,可以使用代理IP的方法来解决问题。网上有很多代理IP的资源,也有一些是免费的,但是免费代理的弊端还是不少的,你就例如说匿名性就不是特别的号,很容易就会被赌坊检测出来你在使用代理IP,但是购买像是犀牛代理IP的这种,不仅仅可以保障你的质量,而且匿名性也好,你可以放心的在任何平台上进行使用,提高工作效率。

3.传统反爬虫手段

(1)、后台对访问进行统计,如果单个IP访问超过阈值,予以封锁。

(2)、后台对访问进行统计,如果单个session访问超过阈值,予以封锁。

(3)、后台对访问进行统计,如果单个userAgent访问超过阈值,予以封锁。

(4)、以上的组合

组合起来能力变大,误伤率下降,在遇到低级爬虫的时候,还是比较好用的。

由以上我们可以看出,其实爬虫反爬虫是个游戏,RMB玩家才最牛逼。因为上面提到的方法,效果均一般,所以还是用JavaScript比较靠谱。

资料来源
https://blog.csdn.net/weixin_45019231/article/details/101272865?ops_request_misc=%7B%22request%5Fid%22%3A%22158271246819195239823257%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158271246819195239823257&biz_id=0&utm_source=distribute.pc_search_result.none-task

https://segmentfault.com/a/1190000005840672

当然,我知道我很菜,在众多大佬面前我就是个弟弟,
反爬虫必备基础知识点_第1张图片
所以我给大家推荐几篇相关的文章:

https://segmentfault.com/a/1190000005840672

https://blog.csdn.net/weixin_45019231/article/details/101272865?ops_request_misc=%7B%22request%5Fid%22%3A%22158271246819195239823257%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158271246819195239823257&biz_id=0&utm_source=distribute.pc_search_result.none-task

你可能感兴趣的:(爬虫)