反爬与反反爬

一、常见反爬手段和解决思路

1、服务器反爬原因

1、爬虫占总PV比例较高,这样浪费钱。
2、三月份爬虫:每年的三月份我们会迎接一次爬虫高峰期,有大量的硕士在写论文的时候会选择爬取一些往网站,并进行舆情分析。因为五月份交论文,所以嘛,大家都是读过书的,你们懂的,前期各种DotA,LOL,到了三月份了,来不及了,赶紧抓数据,四月份分析一下,五月份交论文,就是这么个节奏。
3、公司可免费查询的资源被批量抓走,丧失竞争力,这样少赚钱。
4、数据可以在非登录状态下直接被查询。如果强制登陆,那么可以通过封杀账号的方式让对方付出代价,这也是很多网站的做法。但是不强制对方登录。那么如果没有反爬虫,对方就可以批量复制的信息,公司竞争力就会大大减少。竞争对手可以抓到数据,时间长了用户就会知道,只需要去竞争对手那里就可以了,没必要来我们网站,这对我们是不利的。
5、状告爬虫成功的几率小
6、爬虫在国内还是个擦边球,就是有可能可以起诉成功,也可能完全无效。所以还是需要用技术手段来做最后的保障。

2、服务器常反什么样的爬虫

1、十分低级的应届毕业生
2、应届毕业生的爬虫通常简单粗暴,根本不管服务器压力,加上人数不可预测,很容易把站点弄挂。
3、十分低级的创业小公司
4、不小心写错了没人去停止的失控小爬虫
5、有些网站已经做了相应的反爬,但是爬虫依然孜孜不倦地爬取。什么意思呢?就是说,他们根本爬不到任何数据,除了httpcode是200以外,一切都是不对的,可是爬虫依然不停止这个很可能就是一些托管在某些服务器上的小爬虫,已经无人认领了,依然在辛勤地工作着。
6、成型的商业对手
7、这个是最大的对手,他们有技术,有钱,要什么有什么,如果和你死磕,你就只能硬着头皮和他死磕。
8、抽风的搜索引擎
9、大家不要以为搜索引擎都是好人,他们也有抽风的时候,而且一抽风就会导致服务器性能下降,请求量跟网络攻击没什么区别。

3、反爬虫领域常见的一些概念

爬  虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。误  伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。拦  截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。资  源:机器成本与人力成本的总和。

4、反爬的三个方向

1、基于身份识别进行反爬
2、基于爬虫行为进行反爬
3、基于数据加密进行反爬

5、常见基于身份识别进行反爬

5.1、通过headers字段来反爬

headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫。
1、通过headers中的User-Agent字段来反爬反爬原理:爬虫默认情况下没有User-Agent,而是使用模块默认设置解决方法:请求之前添加User-Agent即可;更好的方式是使用User-Agent池来解决(收集一堆User-Agent的方式,或者是随机生成User-Agent)
2、通过referer字段或者是其他字段来反爬反爬原理:爬虫默认情况下不会带上referer字段,服务器端通过判断请求发起的源头,以此判断请求是否合法解决方法:添加referer字段
3、通过cookie来反爬反爬原因:通过检查cookies来查看发起请求的用户是否具备相应权限,以此来进行反爬解决方案:进行模拟登陆,成功获取cookies之后在进行数据爬取

5.2、通过请求参数来反爬

请求参数的获取方法有很多,向服务器发送请求,很多时候需要携带请求参数,通常服务器端可以通过检查请求参数是否正确来判断是否为爬虫。1、通过从html静态文件中获取请求数据(github登录数据)反爬原因:通过增加获取请求参数的难度进行反爬解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系
2 通过发送请求获取请求数据反爬原因:通过增加获取请求参数的难度进行反爬解决方案:仔细分析抓包得到的每一个包,搞清楚请求之间的联系,搞清楚请求参数的来源
3 通过js生成请求参数反爬原理:js生成了请求参数解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现
4 通过验证码来反爬反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐

6、常见基于爬虫行为进行反爬

6.1、基于请求频率或总请求数量

1、通过请求ip/账号(或者其他的参数例如user-agent、url等)单位时间内总请求数量进行反爬反爬原理:正常浏览器请求网站,速度不会太快,同一个ip/账号大量请求了对方服务器,有更大的可能性会被识别为爬虫解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买个多账号
2 通过同一ip/账号或者其他的参数例如user-agent、url等)请求之间的间隔进行反爬反爬原理:正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬解决方法:请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠
3 通过对请求ip/账号或者其他的参数例如user-agent、url等)每天请求次数设置阈值进行反爬反爬原理:正常的浏览行为,其一天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应解决方法:对应的通过购买高质量的ip的方法/多账号,同时设置请求间随机休眠
4、常见的反爬手段或设备有:云服务的waf(阿里、腾讯)、云服务的bot(阿里、腾讯)、防火墙设备(华为、天融信、深信服、思科等)的应用策略设置(具体设置方法需要有非常丰富的操作和业务经验)等。

6.2、根据爬取行为进行反爬,通常在爬取步骤上做分析

1、通过js实现跳转来反爬反爬原理:js实现页面跳转,无法在源码中获取下一页url解决方法: 多次抓包获取条状url,分析规律
2 通过蜜罐(陷阱)获取爬虫ip(或者代理ip),进行反爬反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath,css等方式进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户解决方法: 完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱
3 通过假数据反爬反爬原理:向返回的响应中添加假数据污染数据库,通常家属剧不会被正常用户看到解决方法: 长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容
4 阻塞任务队列反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率解决方法: 观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对URL进行过滤
5 阻塞网络IO反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入一个大文件的url,当爬虫在进行该请求时将会占用网络io,如果是有多线程则会占用线程解决方法: 观察爬虫运行状态/多线程对请求线程计时/发送请求钱
6 运维平台综合审计反爬原理:通过运维平台进行综合管理,通常采用复合型反爬虫策略,多种手段同时使用解决方法: 仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理。

7、常见基于数据加密进行反爬

7.1、对响应中含有的数据进行特殊化处理

通常的特殊化处理主要指的就是css数据偏移/自定义字体/数据加密/数据图片/特殊编码格式等1、通过自定义字体来反爬反爬思路: 使用自有字体文件解决思路:切换到手机版/解析字体文件进行翻译
2、通过css来反爬
3、通过js动态生成数据进行反爬反爬原理:通过js动态生成解决思路:解析关键js,获得数据生成流程,模拟生成数据
4、通过数据图片反爬解决思路:通过使用图片解析引擎从图片中解析数据5、通过编码格式进行反爬反爬原理: 不适用默认编码格式,在获取响应之后通常爬虫使用utf-8格式进行解码,此时解码结果将会是乱码或者报错解决思路:根据源码进行多格式解码,或者真正的解码格式

Python爬虫学习第九天---反爬与反反爬相关推荐

  1. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  2. 从入门到入土:Python爬虫学习|实例练手|爬取LOL全英雄信息及技能||异步加载|初级难度反扒处理|寻找消失的API

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. 从入门到入土:Python爬虫学习|实例练手|详细讲解|爬取腾讯招聘网|一步一步分析|异步加载|初级难度反扒处理|寻找消失的API来找工作吧

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. Python爬虫学习之爬取淘宝搜索图片

    Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...

  5. Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行

    Python爬虫学习基础--5分钟学会爬取B站视频日播放量排行 基础包含 requests pyquery 进入正题 基础包含 这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的.运用的知 ...

  6. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

最新文章

  1. linux下源码安装vim,ubuntu 源码编译安装最新的vim 8.0
  2. C和C++中static的用法及友元
  3. 计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配
  4. spring依赖注入的基本方法及其原理
  5. C语言 FileStreaming 键盘与屏幕IO
  6. 解析搜索引擎的Robots协议
  7. 2018-04-28
  8. shiro+springmvc+mybatis【转】
  9. IDEA上传项目到SVN
  10. JAVA编译器的作用
  11. 浏览器极速模式和兼容模式差异
  12. 蓝天准系统P750的介绍与开箱
  13. 传智播客8月C/C++基础班开班
  14. caniuse-lite is outdated. Please run: npx browserslist@latest --update-db
  15. 支付系统设计:银行卡支付
  16. Python比较文本相似度的7种方法(详细)
  17. 靠猪八戒接单根本就没什么肉吃,这些才是程序员赚外快的最佳方法!!!
  18. Golang的一个简单实用的http客户端库httpc
  19. MAC修改印象笔记背景色
  20. 如何系统地学习计算机编程?自学还是培训?怎么选?

热门文章

  1. 软件测试热门问题分析(上)
  2. Java VirtualThread 虚拟线程的个人粗浅理解
  3. 吕布机器人评测_腾讯智能机器人评测:功能强无敌,好玩又能打
  4. 测试网易软件的word,Office Word 桌面版开始测试微软编辑器:检查你的拼写和语法...
  5. Go语言map排序(key/value排序)
  6. 杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】
  7. 相机照片误删丢失恢复图文教程
  8. linux 5.5 关机,linux杂记(五)正确关机方法(shutdown,reboot,init,halt)
  9. mysql打开root访问权限
  10. 已有云服务器利用Frp对内网电脑进行公网映射-实现远程Web服务,远程桌面,WebDav等功能