爬虫与反爬虫技术点梳理
1 爬虫与反爬攻防的12层境界
步骤 | 攻击者 | 防守者 | 说明 |
---|---|---|---|
1. 初学者 | 不管三七二十一,直接用 requests 模块开始抓取,不作任何反爬措施。 | 发现同一 IP 和 UA 都是 Python 程序,开始限制访问。 | 初学者不了解反爬技术,直接用简单方法抓取。网站会检测到这种异常访问并限制。 |
2. 小白入门 | 学会设置 UA 模拟浏览器,并设置代理 IP。 | 网站仍发现异常,开始设置登录限制。 | 攻击者稍微提高技术,模仿真实用户访问。网站会进一步检测异常。 |
3. 需要登录 | 注册账号,带 cookie 抓取数据。 | 限制单账号访问速度,发现异常访问。 | 攻击者注册账号后模拟正常用户行为。网站开始检测账号行为并限制速度。 |
4. 多账号抓取 | 购买多个账号,用多个 cookie 抓取。 | 开始 IP 频繁访问限制,可能误封现象。 | 攻击者通过多个账号分散访问。网站开始加强 IP 层面的限制。 |
5. 模拟人类请求 | 利用多账号,多线程,不同时间段抓取。 | 设置验证码,对访问频率快的 IP 验证。 | 攻击者模仿更真实的人类行为,使用多线程等手段。网站加强验证机制。 |
6. 打码平台 | 通过打码平台识别验证码,研究机器学习识别。 | 开始将重要数据通过 Ajax 加载。 | 攻击者利用技术手段破解验证码。网站改用更复杂的动态数据加载方式。 |
7. 完全模拟 | 通过 selenium 完全模拟浏览器操作。 | 动态内容内容加载 | 攻击者使用高级工具模拟完整浏览器操作。网站防守难度增大,甚至无奈放弃。 |
8. 绕过动态内容 | 使用 Puppeteer 或 Playwright 等工具处理动态内容抓取。 | 使用更复杂的动态加载和懒加载技术。 | 攻击者利用现代工具处理 JavaScript 渲染的网站。网站尝试通过更复杂的加载策略增加抓取难度。 |
9. 深度伪装 | 利用抗检测浏览器,使用指纹伪装和环境模拟技术。 | 实施浏览器指纹识别和行为分析技术。 | 攻击者使用技术来伪装浏览器指纹和环境。网站则通过指纹识别和用户行为分析来检测异常。 |
10. 分布式爬虫 | 使用分布式系统,如 Scrapy Cloud 或自建集群,分散 IP 和流量。 | 部署 WAF(Web 应用防火墙)和 CDN,进行流量分析和阻断。 | 攻击者通过分布式系统减轻单点访问压力。网站则利用防火墙和内容分发网络来监控和阻止恶意流量。 |
11. AI 模拟 | 采用深度学习算法模拟真实用户行为,以躲避检测。 | 使用 AI 和机器学习检测异常行为模式。 | 攻击者利用 AI 技术模拟真实用户交互。网站同样采用 AI 来识别和应对复杂的异常行为。 |
12. 复杂验证码破解 | 结合计算机视觉和机器学习自动破解复杂验证码。 | 实施更复杂的验证码,如行为验证码和多因素验证。 | 攻击者使用先进技术破解验证码。网站则采用更复杂和多层次的验证手段。 |
爬虫与反爬虫对抗
初学者阶段
- 攻击者:直接使用简单的
requests
库进行抓取,不考虑反爬策略。 - 防守者:由于请求过于简单和单一,服务器能够快速检测到大量请求来自同一 IP 和 UA(User Agent),并进行限制。
小白入门
- 攻击者:学习伪装浏览器的 UA 和使用代理 IP,以规避基本的反爬策略。
- 防守者:若发现网站访问压力仍然很大,可能会启动登录限制,要求用户登录才能访问更多数据。
需要登录
- 攻击者:创建账号,使用登录后的 Cookie 进行数据抓取。
- 防守者:监控账号的使用情况,限制单个账号的访问频率,并检查异常访问模式。
多账号抓取
- 攻击者:购买多个账号以绕过单个账号的限制,使用多个 Cookie 进行数据抓取。
- 防守者:实施 IP 频率限制,尝试阻止过于频繁的访问,但这可能导致误封正常用户。
模拟人类请求
- 攻击者:模拟人类的行为,使用多线程和多账号,在不同时间段进行抓取以避免被检测。
- 防守者:使用验证码,并对访问频繁的 IP 进行更严格的验证。
打码平台
- 攻击者:借助打码平台自动识别验证码,甚至研究使用机器学习技术来识别复杂验证码。
- 防守者:将数据通过 Ajax 动态加载,以增加抓取难度和反爬虫能力。
完全模拟
- 攻击者:使用 Selenium 等工具模拟完整的浏览器操作,几乎无法与真实用户行为区分。
- 防守者:在这种情况下,防守难度极大,维护成本高,甚至可能放弃小部分数据的保护。
绕过动态内容
- 攻击者:使用 Puppeteer 和 Playwright 等工具渲染并抓取需要 JavaScript 执行的动态内容。
- 防守者:通过懒加载和动态加载技术增加爬取难度,确保数据不易被抓取。
深度伪装
- 攻击者:使用反检测浏览器和环境模拟技术,伪装浏览器的指纹和操作环境。
- 防守者:通过浏览器指纹识别和行为分析,检测异常的访问行为和指纹伪造。
分布式爬虫
- 攻击者:使用分布式爬虫框架分散请求,避免集中 IP 导致的封禁。
- 防守者:通过 Web 应用防火墙和 CDN 监测并阻止异常流量。
AI 模拟
- 攻击者:利用 AI 模拟人类用户的复杂交互和行为,以规避传统检测手段。
- 防守者:使用 AI 进行行为分析,识别并阻止异常的用户行为模式。
- 攻击者:直接使用简单的
2.Playwright 相比 Selenium 具有一些显著的优势:
1. 更高效的页面加载和渲染: Playwright 使用浏览器原生的 API 进行交互,能够更快地加载和渲染页面,从而提高爬取效率。
2. 更强大的浏览器控制能力: Playwright 提供了更细粒度的浏览器控制能力,例如拦截网络请求、模拟用户输入、处理 JavaScript 执行等,可以更灵活地处理复杂的爬虫场景。
3. 更强的反检测能力: Playwright 可以更好地模拟真实用户的行为,例如鼠标移动、页面滚动等,从而降低被目标网站识别为爬虫的风险。
4. 更易于处理动态内容: Playwright 可以等待页面加载完成并执行 JavaScript 渲染,从而更轻松地获取动态加载的内容。
5. 更简洁的代码实现: Playwright 的 API 更简洁易懂,可以减少代码量,提高开发效率。
总结:
特性 | Playwright | Selenium |
---|---|---|
页面加载和渲染速度 | 更快 | 相对较慢 |
浏览器控制能力 | 更强 | 相对较弱 |
反检测能力 | 更强 | 相对较弱 |
处理动态内容 | 更易于 | 相对较难 |
代码实现 | 更简洁 | 相对复杂 |
举例说明:
假设您需要爬取一个使用 AJAX 加载数据的网站。使用
Selenium,您需要手动等待 AJAX 请求完成并更新页面内容,而使用
Playwright,您可以使用 waitForResponse
方法自动等待特定的网络请求完成,从而更方便地获取数据。
爬虫与反爬虫技术点梳理
https://linxkon.github.io/爬虫与反爬攻防的12层境界.html