logo

如何绕过机器人检测

2024-06-29 23:21
本文介绍了如何绕过机器人检测。

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

爬虫产生了世界上近一半的互联网流量,其中许多是恶意的。所以许多网站会进行机器人检测。它们如果判断请求不来自于真人,就会拒绝返回有效信息。

本文会介绍机器人检测的相关知识,也包括如何对抗它们。

什么是机器人检测?

**机器人检测是使用技术手段来确定用户是真实的人还是机器人的技术。**具体而言,这些技术收集数据,应用统计模型来识别将流量标记为来自自动源的模式、操作和行为。 9 机器人是一种自动化软件应用程序,经过编程以执行特定任务。详细地说,它们模仿人类行为并与网页和真实用户进行交互。请注意,并非所有方法都是坏的,甚至Baidu也使用此类方法来进行抓取。

根据 2022 年 Imperva 报告,**2021 年机器人流量占所有互联网活动的 42.3%。**这使得检测技术成为安全的关键方面。考虑到 27.7% 的流量来自恶意机器人,这一点尤其正确。

如您所见,恶意软件非常流行。此外,它不分青红皂白地针对小型或大型企业。因此,机器人缓解措施变得至关重要。这就是为什么越来越多的网站采用这种保护技术的原因。

巧合的是,它们构成了反爬虫技术的很大一部分,这意味着它们可以阻挡你的爬虫。毕竟,网络爬虫是自动抓取多个页面的软件应用程序。这使他们成为机器人。

如果您希望您的爬虫有效,您必须知道如何**绕过机器人检测。**一般来说,你必须对抗反爬虫机制。

要了解更多信息,请深入阅读我们关于您需要了解的七种防抓取技术的文章,或尝试我们的网页抓取指南而不会被阻止

如何通过机器人检测?

我们将从所有人都应该注意的一般提示开始。您应该始终使用它们,因为它们可以让您的刮刀克服大多数障碍。

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

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

换句话说,这个想法是根据您的设置和硬件唯一地识别您。然后,机器人检测系统可以介入并验证您的身份是否真实

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

如您所见,所有这些解决方案都非常通用。如果要避免机器人检测,则可能需要更有效的方法。正如您将要了解的那样,机器人检测绕过通常比这更复杂,但了解最常用的技术和绕过它们的方法肯定会派上用场。

五大机器人检测解决方案以及如何绕过它们

如果你想让你的抓取过程无情地工作,你需要克服几个障碍。机器人检测就是其中之一。

因此,让我们深入探讨五种最广泛和最有效的反机器人解决方案以及如何绕过它们。

1. IP地址信誉

最广泛采用的方法之一是 IP 跟踪。

系统跟踪网站收到的所有请求。**如果在有限的时间内来自同一 IP 的人数过多,系统会阻止该 IP。**发生这种情况是因为只有软件才能在如此短的时间内发出如此多的请求。

**它还可以阻止 IP,因为它的所有请求都是定期发出的。**再一次,这是只有机器人才能做的事情。没有人能如此有计划地行事。

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

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

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

scraper.py

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)

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

**ZenRows 提供出色的优质代理服务。**试试看吧。

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

**爬虫程序检测技术通常分析 HTTP 标头以识别恶意请求。**如果请求在某些键标头中不包含一组预期的值,系统会阻止它。

最常见的是,系统将 User-Agent 标头挑出为最重要的标头。这包含标识请求来源的浏览器、操作系统和/或供应商版本的信息。如果请求似乎不是来自浏览器,则机器人检测系统可能会将其识别为来自脚本。换句话说,您的网络爬虫应始终设置有效的 User-Agent 标头。

反机器人系统可能会查看 Referer 标头。此字符串包含请求来自的网页的绝对或部分地址。如果缺少此项,系统可能会将请求标记为恶意请求。

您可以将标头设置为绕过机器人检测,如下所示:requests

scraper.py

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)

定义用于存储自定义 HTTP 标头的字典。然后,通过参数将其传递给。详细了解请求中的自定义标头requests.get()

3. JavaScript 挑战

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

你可以把它看作是浏览器通过JS执行的任何类型的挑战。可以执行 JavaScript 的浏览器将自动面对一个。这意味着它们以透明的方式运行。用户甚至可能没有意识到这一点。

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

[bypass-cloudflare-challenge

如果您在目标网站上看到此消息,则您现在知道它使用机器人检测系统。这意味着,如果您的抓取工具没有 JavaScript 堆栈,它将无法执行并通过挑战。

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

因此,您的爬虫应该采用无头浏览器技术,例如 SeleniumPuppeteer。例如,Selenium 启动了一个没有 UI 来执行请求的真实浏览器。因此,在使用该软件时,您的抓取工具会在浏览器中打开目标页面,这有助于它绕过机器人检测。

接近 JS 挑战并解决它并不容易,但这是可能的。查看我们的指南:

4. 活动分析

活动分析是关于收集和分析数据,以了解当前用户是人类还是机器人。详细地说,这样的系统持续跟踪和处理用户数据。

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

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

[bypass-activity-analysis

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

现在,阻止其执行。请注意,这种方法可能行不通,甚至会使情况变得更糟。无论如何,以下是使用 Pyppeteer(Puppeteer 的 Python 端口)的方法:

scraper.py

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. 验证码

验证码是一种特殊的质询-响应身份验证,用于确定用户是否为人类。它为访问者提供了计算机难以执行但对人类来说很容易解决的测试。

Google 的 reCAPTCHA 是市场上最先进、最有效的机器人检测系统之一,用于缓解机器人。超过 500 万个网站使用它。这使得 CAPTCHA 成为最受欢迎的反机器人保护系统之一。此外,用户已经习惯了它,并且懒得与他们打交道。

[bypass-captchas

通过挑战的最佳方法之一是采用 CAPTCHA 农场公司。他们提供自动化服务,爬虫可以查询这些服务,以获得一批人工为您解决测试。但是,最快和最便宜的选择是使用足够智能的网络抓取 API,以避免阻塞屏幕。了解有关如何自动解决验证码的更多信息。

结论

您已经大致了解了您需要了解的有关机器人检测的信息,包括绕过它的一些标准到高级方法。如图所示,您可以通过多种方式将抓取工具识别为机器人并阻止。同时,您可以采用一些预防措施和其他技术来确保不会发生这种情况。

重要的是了解这些机器人检测技术的工作原理,以便您更好地准备应对它们。

导航目录