如何绕过机器人检测

许多网站使用反机器人技术。这些使得通过网络抓取从中提取数据变得更加困难。在本文中,您将了解最常用的机器人程序保护技术以及如何绕过机器人程序检测

机器人产生了世界上几乎一半的互联网流量,其中许多是恶意的。这就是为什么这么多站点实施机器人检测系统的原因。此类技术会阻止他们不认为是由人类执行的请求。因此,机器人检测是您的抓取过程的一个问题

让我们了解您需要了解的有关缓解和最流行的机器人程序保护方法的所有信息。当然,您会看到如何打败他们。

什么是机器人检测?

机器人检测或“机器人缓解”是使用技术来确定用户是真人还是机器人。具体来说,这些技术收集数据和/或应用统计模型来识别将流量标记为来自自动机器人的模式、动作和行为

机器人是一种自动化软件应用程序,被编程为执行特定任务。机器人通常在网络上导航。详细来说,它们模仿人类行为并与网页和真实用户进行交互。请注意,并不是所有的机器人都是坏的,甚至谷歌也使用机器人来抓取互联网。

根据2022 年 Imperva Bad Bot 报告,2021 年机器人程序流量占所有互联网活动的 42.3%。这使得机器人检测成为一个严重的问题,也是安全方面的一个关键方面。考虑到 Imperva 发现27.7% 的在线流量是恶意机器人,这一点尤其正确。

如您所见,恶意机器人非常流行。此外,他们不分青红皂白地针对小型或大型企业。因此,机器人缓解问题变得至关重要。这就是为什么越来越多的站点采用机器人保护系统的原因。

请注意,机器人检测是反抓取技术的一部分,因为它可以阻止您的抓取工具。毕竟,网络抓取工具是一种自动抓取多个页面的软件应用程序。这使得 web scrapers 机器人

如果你想让你的网络抓取工具有效,你需要知道如何绕过机器人检测。一般来说,你要避免反刮。只有这样,您才能为网络抓取工具配备绕过网络抓取所需的功能。

这就是为什么我们写了一篇文章来深入研究您需要了解的 7 种防刮技术同样,您可能对我们关于不被阻止的网页抓取指南感兴趣。

您如何通过机器人检测?

有一些通用提示可帮助您了解是否要绕过反机器人保护。这些技巧适用于其他几种情况,您应该始终应用它们。那是因为它们可以让您的抓取工具克服大部分障碍

考虑到机器人检测是关于收集数据的,您应该在网络代理下保护您的抓取工具。代理服务器充当您的抓取工具和目标网站服务器之间的中介。在执行此操作时,它可以防止您的 IP 地址和某些 HTTP 标头被暴露。

这使您可以保护自己的身份并使指纹识别变得更加困难。网站在设法对您进行剖析时会创建一个数字指纹。此过程通过查看您的计算机规格、浏览器版本、浏览器扩展和首选项来进行。

换句话说,这个想法是根据您的设置和硬件来唯一识别您。然后,机器人检测系统可以介入并验证您的身份是否真实。但别担心,您会看到排名前 5 位的爬虫程序检测解决方案,并且很快就会学会如何绕过它们。

作为机器人检测的通用解决方案,您应该将随机性引入您的爬虫中。例如,您可以在抓取过程中引入随机暂停。毕竟,没有人会 24/7 不间断地工作。此外,您需要尽可能多地更改 IP 和 HTTP 标头。这使得爬虫发出的请求更难跟踪。

如您所见,所有这些解决方案都非常通用。如果您想避免机器人检测,您可能需要更有效的方法。正如您即将学习的那样,机器人检测绕过通常比这更难,但是接下来学习顶级机器人检测技术将为您提供第一种方法。

排名前 5 位的机器人检测解决方案以及如何绕过它们

如果你想让你的抓取过程永不停止,你需要克服几个障碍。机器人检测就是其中之一。因此,让我们深入了解 5 种最常用且最有效的反机器人检测解决方案

让我们学习如何绕过机器人检测

1.IP地址信誉

IP 跟踪是最广泛采用的反机器人策略之一。机器人检测系统跟踪网站收到的所有请求。如果在有限的时间内来自同一 IP 的请求过多,系统会阻止该 IP。发生这种情况是因为只有机器人才能在如此短的时间内发出如此多的请求。

此外,反机器人保护系统可能会阻止 IP,因为它的所有请求都是定期发出的。同样,这是只有机器人才能做的事情。没有人可以如此有计划地行动。

这里需要特别注意的是,这些反机器人系统可能会永远破坏您的 IP 地址声誉IP 信誉衡量 IP 地址的行为质量。换句话说,它量化了从 IP 发送的不需要的请求的数量。

如果您的 IP 声誉恶化,这对您的爬虫来说可能是一个严重的问题。特别是,如果您没有使用任何 IP 保护系统。如果您的 IP 已被泄露,请使用Project Honey Pot进行验证。

保护您的 IP 的唯一方法是使用轮换系统。请记住,高级代理服务器提供 IP 轮换您可以使用带有 Python请求的代理来绕过机器人检测,如下所示:

import requests 
 
# defining the proxies server 
proxies = { 
    "http" : "http://yourhttpproxyserver.com:8080", 
    "https" : "http://yourhttpsproxyserver.com:8090", 
} 
 
# your web scraping target URL 
url = "https://targetwebsite.com/example" 
 
# performing an HTTP request with a proxy 
response = requests.get(url, proxies=proxies)

您所要做的就是定义一个proxies字典来指定 HTTP 和 HTTPS 连接。此变量将协议映射到高级服务为您提供的代理 URL。requests.get()然后,通过参数传递给它proxies。在 中了解有关代理的requests更多信息。

此外,了解ZenRows 提供出色的高级代理服务也很有用。

2. HTTP 标头和用户代理跟踪

机器人检测技术通常会分析 HTTP 标头以识别恶意请求。详细地说,他们跟踪最后收到的请求的标头。如果请求在某些关键 HTTP 标头中不包含预期的值集,系统会阻止它

这些保护系统查看的最重要的标头是User-Agent标头这包含标识浏览器、操作系统和/或发出 HTTP 请求的供应商版本的信息。如果请求似乎不是来自浏览器,机器人检测系统可能会将其识别为来自脚本。

换句话说,您的网络爬虫应该始终设置有效的 User-Agent 标头。此外,反机器人系统可能会查看Referer标头。此字符串包含请求来自的网页的绝对地址或部分地址。如果缺少此项,系统可能会将请求标记为恶意的

您可以使用 Python 请求在请求中设置标头以绕过机器人检测,如下所示:

import requests 
 
# defining the custom headers 
headers = { 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36", 
    "Referer": "https://targetwebsite.com/page1" 
} 
 
# your web scraping target URL 
url = "https://targetwebsite.com/example" 
 
# performing an HTTP request with a proxy 
response = requests.get(url, proxies=proxies, headers=headers)

定义一个headers字典来存储您的自定义 HTTP 标头。然后,requests.get()通过 headers 参数传递给它。在 中requests了解有关自定义标头的更多信息。

3. JavaScript 挑战

JavaScript 质询是机器人保护系统用来防止机器人访问给定网页的一种技术。单个页面可以包含数百个 JS 挑战。所有用户,甚至是合法用户,都必须通过它们才能访问网页。

您可以将JavaScript 挑战视为浏览器通过 JS 执行的任何类型的挑战。可以执行 JavaScript 的浏览器将自动面临挑战。这意味着这些挑战是透明的。用户甚至可能没有意识到这一点。

但是一些 JavaScript 挑战可能需要时间才能运行。这会导致页面加载延迟几秒钟。在这种情况下,机器人检测系统可能会通知如下:

bypass-cloudflare-challenge-page-640JavaScript 挑战屏幕示例

如果您在目标网站上看到这样的屏幕,您现在就知道它使用了机器人检测系统。这意味着如果您的爬虫没有 JavaScript 堆栈,它将无法执行并通过挑战

由于网络爬虫通常执行服务器到服务器的请求,因此不涉及浏览器。这意味着没有 JavaScript。因此,他们无法绕过机器人检测。换句话说,如果你想通过 JavaScript 挑战,你必须使用浏览器

所以,你的爬虫应用应该采用无头浏览器技术,比如SeleniumPuppeteer。例如,Selenium 启动一个没有 UI 的真实浏览器来执行请求。因此,当使用 Selenium 时,爬虫会在浏览器中打开目标网页。这有助于 Selenium 绕过机器人检测。

现在,应对 JS 挑战并解决它并不容易。然而,这是可能的。即使涉及到提供最困难的 JavaScript 挑战的 Cloudflare 和 Akamai详细了解Cloudflare bot protection bypass以及如何绕过 Akamai。此外,您可能有兴趣了解如何绕过 PerimeterX的机器人检测。

4.活动分析

活动分析是关于收集和分析数据以了解当前用户是人还是机器人。具体而言,活动分析系统会持续跟踪和处理用户数据

基于活动分析的机器人保护系统会寻找众所周知的人类行为模式。如果找不到足够多的用户,系统会将用户识别为机器人。然后,它可以阻止它或使用 JS 挑战或验证码来挑战它。

您可以尝试通过停止数据收集来阻止它们。首先,验证您的目标网站是否收集用户数据。为此,您可以检查 Chrome DevTools 网络选项卡中的 XHR 部分

request用户数据收集请求

查找在网页上执行操作时触发的可疑 POST 或 PATCH 请求。如上例所示,这些请求通常发送编码数据。请记住,活动分析通过 JavaScript 收集用户数据,因此请检查哪个 JavaScript 文件执行这些请求您可以在“启动器”列中看到它

现在,阻止该文件的执行。请注意,这种方法可能不起作用,甚至会使情况变得更糟。无论如何,这里是你如何使用Pyppeteer(Puppeteer 的 Python 端口)来做到这一点:

import asyncio 
from pyppeteer import launch 
 
browser = await launch() 
page = await browser.newPage() 
 
# activating the request interception on Pyppeteer to block specific requests on this page 
await page.setRequestInterception(value=True) 
 
# registering the request event handler 
page.on(event="request", f=lambda request: asyncio.ensure_future(interceptRequest(req))) 
 
# defining the request event handler function 
async def interceptRequest(request: Request): 
    # if the request comes from the user data collection js file, block it 
    if request.url.endswith("79y983fxwwcc.js"): 
        await request.abort() 
    else: 
        await request.continue_() 
 
# visit the target page 
await page.goto("https://yourtargetwebsite.com")

这使用Puppeteer 请求拦截请求功能来阻止不需要的数据收集请求。这就是 Python 在网络抓取方面必须提供的功能。现在,还可以考虑查看我们关于使用 Python 进行网络抓取的完整指南。

这只是一个例子。请记住,在这种情况下找到绕过机器人检测的方法非常困难。这是因为他们使用人工智能和机器学习来学习和进化。因此,跳过它们的解决方法可能不会长久有效。

5.验证码

CAPTCHA 是一种特殊的挑战-响应挑战,用于确定用户是否是人类。CAPTCHA 为访问者提供测试,这些测试很难让计算机执行,但对人类来说很容易解决

Google 提供了市场上基于 CAPTCHA 的最先进的机器人检测系统之一。该技术称为reCAPTCHA,代表了最有效的机器人缓解策略之一。

正如该项目的官方页面所述,超过 500 万个网站使用它。这使得 CAPTCHA 成为最流行的反机器人保护系统之一。而且,用户习惯了,也懒得理他们

captchareCAPTCHA 验证码示例

通过验证码的最佳方法之一是采用验证码农场公司。这些公司提供自动化服务,爬虫可以查询这些服务,以获取大量人工来为您解决验证码问题。但绝对最快和最便宜的选择是使用足够智能的网络抓取 API 来避免阻塞屏幕。详细了解如何自动解决 CAPTCHA

结论

您已大致了解您需要了解的有关机器人程序缓解的知识,从绕过机器人程序检测的标准方法到高级方法。如此处所示,您的刮板可以通过多种方式被检测为机器人并被阻止。同时,也有几种方法和工具可以绕过反机器人保护系统。

重要的是了解这些机器人检测技术,这样您就知道会发生什么。

具体来说,在本文中您已经了解到:

  • 什么是机器人检测以及这与反抓取有何关系。
  • 机器人检测的工作原理。
  • 什么是最流行和采用的反机器人检测技术,以及关于如何在 Python 中绕过它们的初步想法。

类似文章