in

如何不被阻止的情况下进行网络爬取?

如何不被阻止的情况下进行网络爬取?

Web 抓取中最大的挑战之一是阻塞,这可能由数百种不同的原因引起。然而,我们可以将所有这些原因归结为一个事实——与网络浏览器相比,网络爬虫连接看起来不同。

是什么让网络爬虫连接如此容易识别?
在本文中,我们将通过探索网络抓取工具未能覆盖其踪迹的 4 个核心区域以及对这些细节的分析如何导致阻塞,来了解网络抓取而不会被阻止。这些领域是:请求标头、IP 地址、安全握手和 javascript 执行上下文——当涉及到网络抓取阻止时,每个领域都构成独特的威胁。

标头

检测网络抓取连接的最简单方法是请求标头分析。标头是每个连接的一部分,包括重要的元数据。如果我们的网络抓取工具连接的标头与网络浏览器的标头不同,那么它很容易被识别。为此,我们需要了解标头的工作原理,它们在网络浏览器中的呈现方式以及我们如何在我们的网络抓取代码中复制它。总结一下:

  • 确保标头值与常见的 Web 浏览器匹配。
  • 对于变量值 – 以通用值为目标,例如 Windows 上的 Chrome 或 MacO 上的 Safari。
  • 大规模抓取时随机化一些变量值。
  • 确保标头顺序与 Web 浏览器的顺序相匹配,并且您的 HTTP 客户端遵循标头顺序。

IP地址

每个 HTTP 连接中包含的另一个即时元数据信息是 IP 地址本身。在网络抓取时,我们经常使用代理来避免通过单个连接发送不人道的请求量。这对于避免被流量分析检测到非常有用,但并非所有 IP 地址都是相同的。有些在网络抓取方面的表现比其他的好得多。总结一下:

    • 避免使用数据中心 IP。
    • 使 IP 池多样化以包括许多子网而不仅仅是地址。
    • 检查 IP 元详细信息,以通过 ASN 和其他所有权标识符进一步使 IP 池多样化。

TLS

传输层安全性 (TLS) 是一种用于所有 HTTPS 连接的端到端加密协议。TLS 握手的过程可以导致网络爬虫识别和指纹识别。这是因为每个 HTTP 客户端(无论是编程库还是 Web 浏览器)执行初始 TLS 连接握手的方式都略有不同。这些微小的差异被收集并编译成称为 JA3 的指纹。

总结一下:

    • 分析 TLS 握手以了解 Web 浏览器握手与 http 客户端握手有何不同。通常的罪魁祸首是“密码套件”和“扩展”字段,它们留下了每个客户端库的唯一指纹。
    • JA3 指纹技术适用于跟踪软件,但不适用于个人机器。主要目标是避免被识别为众所周知的机器,如网络抓取框架或库。

Javascript

基于 Javascript 的指纹识别和阻止主要适用于使用浏览器自动化技术(如 Selenium、Playwright 或 Puppeteer)的网络抓取工具。

Javascript 允许服务器在客户端机器上执行远程代码,这可能是最强大的网络爬虫识别技术。客户端的 javascript 环境根据 Web 浏览器本身、操作系统和浏览器自动化技术(例如 Selenium)公开了数千个不同的变量。

其中一些变量可以立即将我们识别为非人类联系,还有一些可以为指纹识别提供独特的跟踪工件。话虽这么说,大多数这些漏洞都可以被堵住或欺骗,这意味着并非所有的希望都破灭了!

总结一下:

  • navigator.webdriver确保在爬虫控制的浏览器中修补众所周知的泄漏(如变量)。
  • 大规模抓取时随机化视口等变量值。
  • 确保 IP 绑定变量(如位置、时区)与使用的代理详细信息相匹配。

反数据抓取保护服务

所有这些不同的技术都被众多的反数据抓取保护服务所使用,因此要更深入地了解每个反数据抓取保护服务,请参阅我们的专门文章:

概    括

在此中心介绍中,我们了解了如何避免在抓取时被阻止,我们将其分为 4 类:IP 地址、标头、TLS 指纹和 Javascript 指纹。

如果您的网络抓取工具被阻止,请先查看请求标头及其顺序。如果您使用的是流行的 HTTP 客户端,那么它可能是 TLS 指纹识别。如果块仅在多次请求后才开始,那么您的 IP 地址可能会被跟踪。如果您使用浏览器自动化(例如 Selenium、Puppeteer 或 Playwright),那么 javascript 指纹识别就会出卖您。

Written by 河小马

河小马是一位杰出的数字营销行业领袖,广告中国论坛的重要成员,其专业技能涵盖了PPC广告、域名停放、网站开发、联盟营销以及跨境电商咨询等多个领域。作为一位资深程序开发者,他不仅具备强大的技术能力,而且在出海网络营销方面拥有超过13年的经验。