**1. 基于请求频率或总请求数量进行反爬**
爬虫的行为与普通用户有着明显的区别,爬虫的请求频率与请求次数要远高于普通用户。
* 通过请求ip/账号单位时间内总请求数量进行反爬
* 反爬原理:正常浏览器请求网站,速度不会太快,同一个ip/账号大量请求了对方服务器,有更大的可能性会被识别为爬虫
* 解决方法:对应的通过购买高质量的ip的方式能够解决问题/购买个多账号
* 通过同一ip/账号请求之间的间隔进行反爬
* 反爬原理∶正常人操作浏览器浏览网站,请求之间的时间间隔是随机的,而爬虫前后两个请求之间时间间隔通常比较固定同时时间间隔较短,因此可以用来做反爬
* 解决方法∶请求之间进行随机等待,模拟真实用户操作,在添加时间间隔后,为了能够高速获取数据,尽量使用代理池,如果是账号,则将账号请求之间设置随机休眠
* 通过对请求ip/账号每天请求次数设置阈值进行反爬
* 反爬原理:正常的浏览行为,其一天的请求次数是有限的,通常超过某一个值,服务器就会拒绝响应
* 解决方法:对应的通过购买高质量的ip的方法/多账号,同时设置请求间随机休眠
**2. 根据爬取行为进行反爬,通常在爬取步骤上做分析**
* 通过js实现跳转来反爬
* 反爬原理:js实现页面跳转,无法在源码中获取下一页url。
* 解决方法:多次抓包获取条状url,分析规律
* 通过蜜罐(陷阱)获取爬虫ip(或者代理ip),进行反爬
* 反爬原理:在爬虫获取链接进行请求的过程中,爬虫会根据正则,xpath,css等方式进进行后续链接的提取,此时服务器端可以设置一个陷阱url,会被提取规则获取,但是正常用户无法获取,这样就能有效的区分爬虫和正常用户
* 解决方法:完成爬虫的编写之后,使用代理批量爬取测试/仔细分析响应内容结构,找出页面中存在的陷阱
* 通过假数据反爬
* 反爬原理:向返回的响应中添加假数据污染数据库,通常家属剧不会被正常用户看到
* 解决方法:长期运行,核对数据库中数据同实际页面中数据对应情况,如果存在问题/仔细分析响应内容
* 阻塞任务队列
* 反爬原理:通过生成大量垃圾url,从而阻塞任务队列,降低爬虫的实际工作效率
* 解决方法:观察运行过程中请求响应状态/仔细分析源码获取垃圾url生成规则,对URL进行过滤
* 阻塞网络IO
* 反爬原理:发送请求获取响应的过程实际上就是下载的过程,在任务队列中混入一个大文件的url,当爬虫在进行该请求时将会占用网络io,如果是有多线程则会占用线程
* 解决方法:观察爬虫运行状态/多线程对请求线程计时/发送请求钱
* 运维平台综合审计
* 反爬原理:通过运维平台进行综合管理,通常采用复合型反爬虫策略,多种手段同时使用
* 解决方法:仔细观察分析,长期运行测试目标网站,检查数据采集速度,多方面处理
- 爬虫基本概念
- 爬虫介绍
- 通用爬虫与聚焦爬虫
- 通用爬虫
- 聚焦爬虫
- HTTP与HTTPS协议
- HTTP协议简介
- HTTP的请求与响应
- 客户端HTTP请求
- 服务端HTTP响应
- requests库
- requests库简介
- requests简单使用
- 发送带header的请求
- 发送带参数的请求
- 案例:下载百度贴吧页面
- 发送POST请求
- 使用代理
- 为什么要使用代理?
- 正反向代理
- 代理服务器分类
- 使用代理
- cookie和session
- cookie和session的区别
- 爬虫处理cookie和session
- 使用session登录网站
- 使用cookie登录网站
- cookiejar
- 超时和重试
- verify参数忽略CA证书
- URL地址的解码和编码
- 数据处理
- json数据处理
- json数据处理方案
- json模块处理json数据
- jsonpath处理json数据
- 正则表达式
- lxml
- xpath与lxml介绍
- xpathhelper插件
- 案例
- Beautiful Soup
- Beautiful Soup介绍
- 解析器
- CSS选择器
- 案例
- 四大对象
- 爬虫与反爬虫
- 爬虫与反爬虫的斗争
- 服务器反爬的原因
- 什么样的爬虫会被反爬
- 反爬领域常见概念
- 反爬的三个方向
- 基于身份识别进行反爬
- 基于爬虫行为进行反爬
- 基于数据加密进行反爬
- js解析
- chrome浏览器使用
- 定位js
- 设置断点
- js2py
- hashlib
- 有道翻译案例
- 动态爬取HTML
- 动态HTML
- 获取Ajax数据的方式
- selenium+driver
- driver定位
- 表单元素操作
- 行为链
- cookie操作
- 页面等待
- 多窗口与页面切换
- 配置对象
- 拉勾网案例
- 图片验证码识别
- 图形验证码识别技术简介
- Tesseract
- pytesseract处理图形验证码
- 打码平台
- 登录打码平台
- 验证码种类
- 多任务-线程
- 继承Thread创建线程
- 查看线程数量
- 资源共享
- 互斥锁
- 死锁
- 避免死锁
- Queue线程
- 多线程爬虫
- 多任务-进程
- 创建进程
- 进程池
- 进程间的通信
- Python GIL
- scrapy框架
- scrapy是什么?
- scrapy爬虫流程
- 创建scrapy项目
- Selector选择器
- logging
- scrapy shell
- 保存数据
- Item数据建模
- 翻页请求
- Request
- CrawlSpider
- settings
- 模拟登录
- 保存文件
- 内置Pipeline
- 自定义Pipeline
- 中间件
- selenium动态加载
- 防止反爬
- 随机User-Agent
- 随机IP代理
- settings中的参数
- 随机延迟
- request.meta常用参数
- 分布式爬虫
- 分布式原理
- scrapy_redis
- 去重问题
- 分布式爬虫编写流程
- CrawSpider改写成分布式
- scrapy_splash
- scrapy_splash是什么?
- scrapy_splash环境搭建
- APP抓取
- Android模拟器
- appium
- appium是什么?
- appium环境搭建
- appium环境联调测试
- appium的使用
- 演示项目-抓取抖音app
- 抖音app与appium的联调测试
- 元素定位
- 抖音appium代码
- 抓包软件
- url去重处理