爬虫与反爬虫技术点梳理

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
作者
linxkon
发布于
2022年1月1日
许可协议