Appearance
防御爬虫
- 防御爬虫是指通过技术手段或策略,阻止恶意爬虫非法抓取网站数据(如内容、用户信息、商品价格等),同时不影响正常用户和合法爬虫(如搜索引擎爬虫)的访问。由于爬虫技术持续迭代,防御需采用 “多层策略”,结合多种手段应对。
robot.txt
- 爬虫在请求网站时,会先读取 robots.txt 文件,根据文件中的规则判断是否允许爬取目标页面。
- 注意:robots.txt 文件只是一个声明,不能作为绝对的限制,因为爬虫可以忽略 robots.txt 文件,直接请求目标页面。
Header 检测
- 反扒原理:服务器会根据请求头中的
User-Agent``Referer字段判断请求是否来自爬虫,从而采取不同的响应策略(如返回不同的页面、返回错误信息等)。 - 解决方案:模拟正常请求头,如
User-Agent、Referer、Cookies等。
频率限制
- 反扒原理:对单个 IP 的请求频率、请求时间间隔进行防御。
- 解决方案:
- 随机化请求间隔(如 1-3 秒随机间隔)。
- 使用 IP 代理池
行为分析
- 反扒原理:
- 页面跳转速度:爬虫可能瞬间从 A 页跳到 B 页,而人类需要 0.5-2 秒反应时间。
- 点击位置:人类点击可能偏左 / 偏右,爬虫通常点击元素正中心。
- 滚动行为:人类滚动页面有加速 / 减速,爬虫可能匀速滚动或直接拉到底部。
- 解决方案:
- 随机化跳转时间
- 随机化点击位置(如元素中心、偏左、偏右)。
- 随机化滚动行为(如匀速、加速、减速)。
动态加载
- 反扒原理:核心数据(如商品价格、列表内容)通过 JavaScript 动态加载(而非直接写在 HTML 中),简易爬虫(不执行 JS)无法获取。
- 解决方案:
- 使用 Selenium 等工具执行 JS 代码,获取动态加载的内容。
- 分析 AJAX 请求,直接请求 API 接口获取数据。
前端混淆
- 反扒原理:对 HTML 标签、类名、ID 进行随机化(如 class="a1b2c3"而非 class="price"),或用 JS 动态生成 DOM 结构,增加爬虫解析难度。
- 解决方案:
- 分析前端代码,提取关键数据(如价格、列表内容)。
蜜罐陷阱
- 反扒原理:在页面中嵌入隐藏的表单、链接、图片等元素,当爬虫访问页面时,会触发这些元素的事件(如提交表单、点击链接),从而获取敏感信息。
- 解决方案:
- 分析前端代码,提取关键数据(如价格、列表内容)。
数据加密
- 反扒原理:对关键数据加密(如价格用 Base64 加密,前端 JS 解密后显示),爬虫直接抓取到的是密文。
- 解决方案:
- 分析前端代码,提取解密函数(如 Base64 解密)。
- 使用 Python 等语言实现解密函数,获取明文数据。
Token 验证
- 反扒原理:每次请求需携带有效 Token(如 JWT),Token 定期失效(如 1 小时),且与用户会话绑定。
- 解决方案:
- 分析前端代码,提取 Token 生成函数(如 JWT 加密)。
- 使用 Python 等语言实现 Token 生成函数,获取 Token。
签名机制
- 反扒原理:对请求参数(如时间戳、随机数)进行签名(如 MD5 加密),后端验证签名有效性,防止参数被篡改或重复请求。
- 解决方案:
- 分析前端代码,提取签名函数(如 MD5 加密)。
- 使用 Python 等语言实现签名函数,获取签名值。
