网页爬虫不被封锁:12 种经过验证的技巧

关于如何爬虫网站而不被封锁的教程。了解 12 种不同的解决方案,用于克服网站爬虫封锁。
7 分钟阅读
网页抓取不被封锁

机器人现在占所有网络流量的 51%。 网站知道这一点,并且正在反击。来自 Cloudflare、Akamai 和 DataDome 的反机器人系统现在结合 IP 信誉、TLS 指纹识别、浏览器指纹识别和行为分析,在返回任何一行 HTML 之前就封锁爬虫工具。如果你的爬虫工具一直被封锁,本指南会准确解释原因,并给出 12 种具体技巧来解决它。

快速总结:如何爬虫而不被封锁

  • 使用住宅代理轮换 IP 地址。数据中心 IP 很容易被标记。
  • 设置完整的、类似浏览器的 HTTP 标头,包括 User-AgentReferer
  • 使用 2 到 10 秒之间的可变延迟来随机化请求时间。
  • 使用带有 stealth 插件的无头浏览器来通过指纹检查。
  • 自动处理 CAPTCHA,因为手动解决无法扩展。
  • 将代理地理位置与目标网站预期的用户群匹配。
  • 使用托管爬虫 API(如 Bright Data 的 网络解锁器)来自动完成上述所有操作。

为什么网站会封锁网页爬虫工具

理解你为什么被封锁,是避免被封锁的第一步。检测并不是在你下载页面之后才发生的。它通常发生在连接的最初几毫秒内,在提供任何 HTML 之前。最常见的反爬虫技术以分层组合的方式工作——而绕过它们需要同时匹配所有层。

基于 IP 的检测

你发出的每个请求都携带一个源 IP 地址。反机器人系统维护着已知数据中心 IP 段(AWS、GCP、Azure、DigitalOcean)、之前被标记的 IP,以及表现出高请求量的 IP 的信誉数据库。单个 IP 每分钟发送 500 个请求很容易被识别。许多高安全性网站默认会标记数据中心 IP,因为没有真实的住宅用户会从 AWS 数据中心访问。

浏览器和 TLS 指纹识别

每个 HTTPS 连接都从 TLS 握手开始。在 ClientHello 阶段,你的客户端会在交换任何内容之前,以明文广播其支持的密码套件、TLS 版本、扩展和椭圆曲线偏好。反机器人系统会将这些数据哈希成一个指纹(JA3 或 JA4 标准),并将其与已知机器人签名进行比较。Python 的 requests 库具有独特的 TLS 指纹,不同于任何真实浏览器,并且很容易被 Cloudflare 和 Akamai 检测到。

除了 TLS,网站还通过数十种 JavaScript 信号检测你的浏览器类型:navigator.webdriver、canvas 渲染输出、WebGL GPU 字符串、已安装字体、屏幕分辨率、音频上下文行为和插件列表。无头 Chrome 会在其 User-Agent 字符串中暴露 HeadlessChrome,并留下 navigator.webdriver = true 设置,这在大多数主要反机器人平台上都是即时检测信号。

行为分析

网站不仅查看单个请求。它们会观察整个会话中的模式。PerimeterX/HUMAN 和类似系统会测量请求间时间、滚动模式、鼠标移动轨迹、点击行为、导航深度和会话持续时间。一个每隔正好 1.0 秒发送请求、从不滚动、从不移动鼠标,并且不访问首页而直接跳到深层产品页面的爬虫工具,会立即与人类区分开来。

CAPTCHA 和 JavaScript 挑战

当网站怀疑存在自动化但不确定时,它会发出挑战。Cloudflare Turnstile、reCAPTCHA v3 和 hCaptcha 会运行 JavaScript 探针来检查自动化痕迹。未能通过这些挑战,或者根本没有 JavaScript 执行,会导致封锁或无限重定向循环。

蜜罐陷阱

一些网站会在其 HTML 中注入隐藏链接,通过 CSS(display: none)对真实用户不可见,但对解析原始 HTML 的爬虫完全可访问。跟随这些链接会立即将你标记为机器人。一个盲目跟随文档中每个 <a href> 标签的爬虫工具最终会走进其中一个陷阱。

爬虫网站而不被封锁的主要技巧

1. 使用代理轮换你的 IP 地址

IP 轮换是最基本的反检测技术。代理池不会从单个 IP 地址发送所有请求,而是将流量分配到数百或数千个 IP 上,这样没有单个 IP 会累积可疑的请求量。学习如何在 Python 中轮换代理是任何构建严肃爬虫工具的人必备的技能。

基本模式:通过不同的代理端点路由每个请求,并在 IP 被封锁时实现自动重试逻辑。

import requests
from itertools import cycle
import random
import time

proxies = [
    "http://proxy1.example.com:8080",
    "http://proxy2.example.com:8080",
    "http://proxy3.example.com:8080",
]

proxy_pool = cycle(proxies)

def fetch(url):
    proxy = next(proxy_pool)
    try:
        response = requests.get(
            url,
            proxies={"http": proxy, "https": proxy},
            timeout=10
        )
        response.raise_for_status()
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"Proxy {proxy} failed: {e}")
        return None

# Add a random delay between requests to avoid rate limiting
time.sleep(random.uniform(2, 6))

高流量操作需要的不仅仅是简单的轮询轮换。它需要智能会话管理、自动 IP 退役和地理定向选择。这就是为什么生产级爬虫使用托管代理基础设施,而不是静态列表。

2. 使用住宅代理或移动代理

并非所有代理都相同。数据中心代理与住宅代理代表了成本与检测风险之间的基本权衡。数据中心代理通过云服务器 IP 路由流量:快速、便宜,但任何带有 ASN 黑名单的反机器人系统都会立即识别其为非人类流量。

住宅代理通过真实 ISP 分配的 IP 地址路由流量,这些地址绑定到实际家庭和企业连接。对于目标网站,请求看起来像是来自特定城市、特定 ISP 上的真实用户。移动代理更进一步,通过真实移动运营商 IP(4G/5G)路由流量,由于运营商使用 CGNAT(许多真实用户共享一个 IP),它们被列入黑名单的可能性更低。

代理类型 可检测性 速度 最适合
数据中心 非常快 低安全性网站、高流量
ISP/静态住宅 一致身份、基于账户的爬虫
住宅 电商、旅游、社交平台
移动 非常低 移动端特定内容、严格网站

Bright Data 运营着一个覆盖 195+ 个国家/地区的 400M+ 住宅 IP 网络,这是可用的最大道德来源代理网络。对于甚至住宅 IP 都会被标记的场景,7M+ 移动 IP 提供了可能的最高信任信号。

3. 设置真实的请求标头

Python 的 requests 库默认只发送最少的一组标头。与真实的 Chrome 浏览器相比,差异立即显而易见:

# What requests sends by default:
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

# What Chrome 121 actually sends:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

网站会检查 AcceptAccept-LanguageAccept-EncodingSec-Fetch-* 标头以及标头顺序,以区分真实浏览器和脚本。设置与你声称使用的实际浏览器相匹配的标头,包括在同一域名的页面之间导航时的 Referer 标头。要深入了解,请参阅我们的用于网页爬虫的 HTTP 标头指南。

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.google.com/",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "cross-site",
    "Upgrade-Insecure-Requests": "1",
}

response = requests.get(url, headers=headers)

4. 轮换 User-Agent

在每个请求中发送相同的 User-Agent 字符串是另一个容易被标记的行为。真实用户并不都在 Windows 10 上运行 Chrome 121。构建一个真实的、近期活跃的 User-Agent 字符串池并轮换它们。关键规则:你轮换到的 User-Agent 必须内部一致。如果你声称是在 macOS 上使用 Chrome,你的 Accept-LanguageSec-CH-UA 标头应反映这一点。

import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1",
]

headers["User-Agent"] = random.choice(user_agents)

保持你的 User-Agent 池为最新。2021 年的浏览器版本本身就是检测信号,因为从统计上看,它们不太可能代表 2026 年的真实流量。

5. 管理 TLS 指纹识别

这是最常被遗漏的技术,也是会击败那些其他方面都做对了的爬虫工具的技术。

当 Python 的 requests 库发起 HTTPS 连接时,底层 TLS 栈(OpenSSL 或类似组件)会发送一个 ClientHello,其中包含特定的密码套件和扩展组合。这个组合会哈希成一个明显非浏览器的 JA3 值。Cloudflare、Akamai 和 DataDome 会在提供任何内容之前检查此指纹,因此你可能在标头被评估之前就被封锁。

解决方法:使用能够模拟真实浏览器 TLS 栈的 HTTP 客户端。curl_cffi 是当前 Python 的标准:

from curl_cffi import requests as curl_requests

# impersonate="chrome121" tells curl_cffi to use Chrome 121's exact
# TLS cipher suites, extensions, and HTTP/2 settings
response = curl_requests.get(
    "https://example.com",
    impersonate="chrome121",
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
    }
)

print(response.status_code)

curl_cffi 包装了 curl-impersonate,这是一个在加密层面模拟真实浏览器 TLS 指纹的 libcurl 构建。关键要求:你的 User-Agent 必须与你正在模拟的浏览器配置文件匹配。发送 Chrome 121 TLS 指纹,同时使用 Firefox User-Agent,会产生高级系统可检测到的不一致。

对于生产规模使用,Bright Data 的 网络解锁器 会自动处理 TLS 指纹匹配,无需库管理。

6. 使用带有 Stealth 插件的无头浏览器

当目标网站运行 JavaScript 挑战时,你需要一个真实浏览器。理解什么是无头浏览器以及它如何工作,可以为这项技术打下基础。Playwright 和 Puppeteer 自动化 Chromium,允许完整的 JavaScript 执行、cookie 处理和动态内容渲染。

问题是:默认无头 Chrome 很容易被检测到。它会暴露 navigator.webdriver = trueHeadlessChrome User-Agent 字符串、缺失的浏览器插件和异常的屏幕尺寸。Cloudflare 的 Turnstile 和类似系统会运行 200+ 项 JavaScript 检查,并会在毫秒内捕获默认的 Playwright 会话。

解决方法是 playwright-stealth,这是一个修补这些检测向量的插件:

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()

    # Patches navigator.webdriver, chrome runtime, iframe content windows,
    # media codecs, and other automation artifacts
    stealth_sync(page)

    page.goto("https://example.com")
    print(page.title())
    browser.close()

playwright-stealth 处理最常见的检测向量:navigator.webdriverwindow.chromenavigator.pluginsnavigator.languages 和权限 API 不一致。对于 Selenium 用户,undetected-chromedriver 是等价方案,它在二进制层面修补 ChromeDriver。

重要限制: stealth 插件会降低检测风险,但不会消除它。Cloudflare Turnstile 和 Akamai Bot Manager 已经显著演进,仍然可以捕获已修补的无头浏览器。为获得最高可靠性,Bright Data 的 爬虫浏览器 是一个预先加固的浏览器环境,专为开箱即用地通过这些检查而构建,无需任何插件配置。

7. 随机化请求时间和行为

以固定间隔发送请求的爬虫工具,即使间隔很宽松,也可通过时间分析检测到。真实用户不会每 2.0 秒访问一个页面。他们会阅读、滚动、四处点击、暂停,并以非线性方式导航。

使用高斯(正态)分布来设置延迟。这会产生类似人类的变化,大多数延迟集中在平均值附近,但偶尔会很长:

import numpy as np
import time
import random

def human_delay(mean=4.0, std=1.5, min_delay=1.0):
    """Generate a human-like delay using normal distribution."""
    delay = np.random.normal(mean, std)
    # Ensure we don't go below minimum
    delay = max(delay, min_delay)
    time.sleep(delay)

# Between page requests
human_delay(mean=4.0, std=1.5)

# Between actions on the same page (faster)
human_delay(mean=1.2, std=0.4)

除了时间之外,还可以使用 Playwright 模拟真实会话行为:在提取数据之前逐步滚动页面,在点击之前将鼠标移动到元素上,并改变爬取的入口点,而不是总是直接导航到目标 URL。

# Simulate human scroll behavior before extracting content
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.3)")
time.sleep(random.uniform(0.8, 2.0))
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.7)")
time.sleep(random.uniform(0.5, 1.5))

8. 自动处理 CAPTCHA

CAPTCHA 是一堵墙,而不是死胡同,但手动解决无法扩展。对于生产级爬虫,你需要自动化 CAPTCHA 处理。查看用于网页爬虫的最佳 CAPTCHA 破解工具将帮助你为自己的用例选择合适的工具。

主要方法:

  • 第三方破解服务(2captcha、Anti-Captcha):将 CAPTCHA 图像或站点密钥发送给人工破解者或 AI 模型,接收令牌,并将其注入表单。
  • reCAPTCHA v3 分数管理:reCAPTCHA v3 静默运行并分配风险分数。你的分数越高,看到挑战的可能性越低,因此良好的会话卫生(真实标头、时间、浏览历史)会保持高分。
  • 托管解决方案:Bright Data 的 网络解锁器 包含内置的验证码破解工具,可透明处理 reCAPTCHA、hCaptcha 和 Cloudflare Turnstile,无需集成。
import requests

# With Bright Data Web Unlocker, CAPTCHAs are solved automatically
# before the response is returned. No solver integration needed.
response = requests.get(
    "https://target-site.com/product-page",
    proxies={
        "https": "https://username:[email&nbsp;protected]:33335"
    },
    verify=False  # Web Unlocker uses its own SSL certificate
)

print(response.status_code)  # Returns 200 with fully rendered content

9. 避免蜜罐陷阱

蜜罐链接对真实用户不可见,但在原始 HTML 中可见。跟随它们是即时机器人信号。

通过检查 CSS 可见性,在跟随链接之前检测它们:

from bs4 import BeautifulSoup

def is_visible(tag):
    """Return False if the element is hidden via CSS."""
    style = tag.get("style", "")
    if "display:none" in style.replace(" ", "") or 
       "visibility:hidden" in style.replace(" ", ""):
        return False
    # Also check for common honeypot class names
    classes = tag.get("class", [])
    honeypot_classes = {"hidden", "invisible", "honeypot", "trap"}
    if honeypot_classes.intersection(set(classes)):
        return False
    return True

soup = BeautifulSoup(html_content, "html.parser")
safe_links = [
    a["href"] for a in soup.find_all("a", href=True)
    if is_visible(a)
]

这无法捕获每个蜜罐,因为有些是通过外部 CSS 类而不是内联样式隐藏的。Playwright 的 page.is_visible() 方法更可靠,因为它评估的是计算后的 CSS 样式,而不仅仅是内联属性。

10. 使用指数退避处理速率限制

对于 HTTP 429(Too Many Requests)响应,立即重试会适得其反——它会加速封锁。实现指数退避,以优雅地退让并恢复爬虫,而不会触发更严厉的封禁:

import time
import random
import requests

def fetch_with_backoff(url, headers, proxies, max_retries=5):
    """Retry with exponential backoff on rate limit responses."""
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers, proxies=proxies, timeout=15)

        if response.status_code == 200:
            return response
        elif response.status_code == 429:
            # Respect Retry-After header if present
            retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
            print(f"Rate limited. Waiting {retry_after}s (attempt {attempt + 1})")
            time.sleep(retry_after)
        elif response.status_code in (403, 503):
            # Likely blocked, rotate IP and back off
            print(f"Blocked (HTTP {response.status_code}). Backing off...")
            time.sleep(2 ** attempt + random.uniform(0, 1))
        else:
            response.raise_for_status()

    raise Exception(f"Max retries exceeded for {url}")

11. 匹配地理上下文

许多网站会根据请求的地理来源提供不同内容或执行更严格的机器人检测。针对美国电商网站的产品价格爬虫工具应通过美国住宅 IP 路由请求,而不是德国或新加坡的 IP。地理位置不匹配会在请求来源与 Accept-Language 或区域设置标头之间造成不一致,行为分析系统可以标记这一点。

Bright Data 的代理网络支持按国家/地区、州、城市和运营商进行定位,使你的请求可以来自目标网站预期的精确地理上下文。在构建地理定位策略之前,你可以探索所有可用的代理 IP 位置

12. 利用底层 API

在构建复杂的爬虫工具之前,检查目标网站是否暴露了其前端使用的内部 API。打开浏览器的开发者工具,进入 Network 标签页,并在浏览网站时观察 XHR/Fetch 请求。许多网站,包括大型电商平台,都从 JSON 端点加载数据,直接调用这些端点比解析 HTML 容易得多。

这些内部 API 通常具有结构化 JSON 响应(无需 HTML 解析)、比主渲染页面更低的反机器人审查,以及易于自动化的分页参数。

权衡是:内部 API 没有文档,可能会在不通知的情况下更改,并且可能需要通过主站点获取的身份验证令牌。但当它们可用且稳定时,它们是最有效的爬虫路径。

最快的方法:使用网页爬虫工具 API

以上 12 种技术都需要单独实现、维护,并随着反机器人系统的演进持续适应。在规模化时,管理这套技术栈本身就变成了工作。

替代方案:将整个技术栈整合到一次 API 调用中。

Bright Data 网络解锁器

网络解锁器 是一个由 AI 驱动的代理网关,会根据目标网站的要求自动处理 IP 轮换、TLS 指纹匹配、CAPTCHA 解决和浏览器渲染。你发出一个标准 HTTP 请求。网络解锁器 决定使用哪种代理类型、呈现哪个指纹、是否解决 CAPTCHA,以及是否渲染 JavaScript,然后无论网站的反机器人复杂度如何,都返回干净内容。

import requests

response = requests.get(
    "https://any-protected-site.com/data",
    proxies={"https": "https://user:[email&nbsp;protected]:33335"},
    verify=False,
)

# Returns fully rendered, unblocked content
print(response.text)

网络解锁器 经过测试,并针对 Cloudflare、Akamai、DataDome 和 PerimeterX 持续更新。一次 API 调用取代 10 种手动技术。

Bright Data 爬虫浏览器

对于需要完整浏览器交互的网站,包括多步骤流程、登录序列和 JavaScript 密集型 SPA,爬虫浏览器 提供了一个可通过 CDP 访问的预加固 Chromium 实例。它可直接与 Playwright 和 Puppeteer 集成,并且无需任何插件配置即可通过 Cloudflare Turnstile 和 Akamai Bot Manager 的指纹检查。

from playwright.sync_api import sync_playwright

SBR_WS_CDP = "wss://brd-customer-XXXX:[email&nbsp;protected]:9222"

with sync_playwright() as pw:
    browser = pw.chromium.connect_over_cdp(SBR_WS_CDP)
    page = browser.new_page()
    page.goto("https://cloudflare-protected-site.com")
    print(page.inner_text("body"))
    browser.close()

Bright Data 爬虫 API

对于需要从特定平台获取结构化数据、但不想编写或维护任何爬虫基础设施的团队,Bright Data 的爬虫 API 提供了一个包含 120+ 个现成爬虫工具的库,覆盖最热门的域名:Amazon、LinkedIn、Instagram、Zillow、Indeed、TikTok、Walmart、Booking.com、Glassdoor 等。

每个爬虫工具接受 URL 或关键词输入,在内部处理所有解封和渲染,并以 JSON 或 CSV 返回干净的结构化数据。不需要代理管理,不需要解析器维护,也不需要指纹调优。你只需为成功交付的记录付费。

# Example: trigger an Amazon product scrape via the Scraper APIs
curl -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     -d '[{"url":"https://www.amazon.com/dp/B0CRMZHDG8","asin":"B0CRMZHDG8","zipcode":"94107"}]' 
     "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_l7q7dkf244hwjntr0&format=json"

专用爬虫工具可用于电商平台LinkedIn社交媒体渠道,结果可通过 webhook、API 轮询或直接下载交付。对于尚未覆盖的域名,爬虫工具 Studio 让你可以使用 AI 构建自定义爬虫工具,无需基础设施工作。

Bright Data 住宅代理

对于你正在管理自己的爬虫基础设施但需要可靠的大规模 IP 池的场景:Bright Data 的住宅代理网络覆盖 195+ 个国家/地区的 400M+ IP,可精细地理定位到城市和运营商级别。它包括用于移动运营商流量的 7M+ 移动 IP,以及用于具有高信任分数的静态住宅 IP 的 ISP 代理

反机器人系统:你面对的是什么

Cloudflare

Cloudflare Bot Management 是部署最广泛的反机器人系统,保护着数百万个网站,包括大多数主要电商和媒体资产。它分层运行:JavaScript 挑战(包括 Turnstile)、IP 信誉评分、TLS/JA4 指纹识别和行为分析。Cloudflare 的 cf_clearance cookie 一旦通过真实浏览器中的挑战获得,就可以在其 TTL 内重复使用。检测严重依赖 navigator.webdriver 暴露、不一致的标头集和非浏览器 JA4 哈希。要了解有效方法的完整技术演练,请参阅我们的如何绕过 Cloudflare指南。

Akamai Bot Manager

Akamai 通过注入的 JavaScript 收集客户端传感器数据(canvas、字体、时区、WebGL),并在服务器端根据 abck cookie 令牌验证它。它同时交叉引用 TLS/JA3 指纹和会话令牌,因此只修复一层是不够的。Akamai 常见于企业零售、航空和金融网站。仅密码套件不匹配就可能触发软封锁或 403。

DataDome

DataDome 使用基于实时 ML 的评分来防护浏览器爬虫和 API 爬虫。它会一起验证 IP ASN、请求节奏、标头熵和客户端 JavaScript 信号。验证失败会返回一个显眼的 “Access denied. Powered by DataDome.” 页面。与原始 HTTP 客户端相比,使用移动住宅 IP 和持久会话的完整浏览器自动化在对抗 DataDome 时表现明显更好。

PerimeterX / HUMAN

PerimeterX(现为 HUMAN Security)专注于行为分析,跟踪完整会话中的鼠标移动、按键、滚动深度、焦点/失焦事件和时间,以构建行为指纹。它将会话与人类基线进行比较并分配机器人分数。值得注意的是,它使用延迟执行策略,允许可疑机器人自由浏览,同时在封锁前积累行为证据。这意味着你的前几个请求可能会在触发封锁之前成功。

比较:封锁机制和应对措施

封锁机制 推荐技术 Bright Data 解决方案
IP 封禁 / 速率限制 使用代理轮换 IP 住宅代理(400M+ IP)
数据中心 IP 检测 使用住宅或移动代理 ISP 代理、移动代理
TLS 指纹识别 使用带浏览器模拟的 curl_cffi 网络解锁器(自动 TLS 匹配)
浏览器指纹识别 无头浏览器 + stealth 插件 爬虫浏览器(内置 stealth)
CAPTCHA 挑战 自动化 CAPTCHA 破解 网络解锁器(内置破解)
行为分析 随机化时间 + 模拟人类操作 爬虫浏览器(类人行为)
蜜罐陷阱 跳过隐藏链接 爬虫浏览器(智能导航)
JavaScript 挑战 完整浏览器渲染 爬虫浏览器、网络解锁器
地理封锁 地理定向代理 195+ 个国家/地区定位
速率限制 指数退避 网络解锁器(托管速率限制)

总结

没有一种单一技术可以击败所有反机器人系统。现代检测分层覆盖 IP 信誉、TLS 指纹识别、浏览器指纹识别和行为分析,而绕过它需要同时匹配所有层。

对于开发和低流量爬虫:从住宅代理、真实标头、用于 TLS 指纹管理的 curl_cffi,以及用于 JavaScript 密集型网站的带 playwright-stealth 的 Playwright 开始。

对于生产规模爬虫:手动维护所有这些层的复杂性很高,包括轮换指纹、更新 stealth 插件、管理代理池和集成 CAPTCHA 破解工具。Bright Data 的解决方案将 IP 轮换、TLS 指纹管理、CAPTCHA 解决和浏览器渲染整合到一次 API 调用中。这就是你专注于数据而不是基础设施的方式。

常见问题

网站能判断你是否在爬虫吗?

可以。网站使用 IP 信誉、HTTP 标头分析、TLS 指纹识别、浏览器指纹识别、CAPTCHA 挑战和行为分析来检测爬虫工具。大多数检测发生在提供任何页面内容之前的毫秒内。

为什么网页爬虫工具会被封锁?

当爬虫工具从一个 IP 发出太多请求、发送非人类 HTTP 标头、未通过 TLS 或浏览器指纹检查,或触发 CAPTCHA 挑战时,它们会被封锁。住宅代理和 stealth 浏览器会降低所有这些风险。

不被封锁地爬虫的最佳方式是什么?

最可靠的方法结合了轮换住宅代理、真实请求标头、随机时间延迟,以及带 stealth 插件的无头浏览器。对于生产规模抓取,像 Bright Data 的 网络解锁器 这样的托管解决方案会自动处理所有这些,将 IP 轮换、TLS 指纹管理、CAPTCHA 解决和浏览器渲染整合到一次 API 调用中。

网页爬虫合法吗?

抓取公开可访问的数据在大多数司法管辖区通常是合法的,特别是对于非个人、非受版权保护的数据。务必检查目标网站的 robots.txt 和服务条款。个人数据抓取可能会受到 GDPR、CCPA 和类似法律的限制。在美国,hiQ v. LinkedIn 裁决确认,抓取公共数据不违反《计算机欺诈和滥用法》。

什么是 TLS 指纹识别?

TLS 指纹识别通过分析 HTTPS 握手期间使用的密码套件、TLS 版本和扩展的独特组合,来识别客户端类型(浏览器、机器人或脚本)。反机器人系统使用 JA3 和 JA4 哈希来封锁已知抓取工具,例如 Python 的 requests 库。关键含义是:即使 HTTP 标头完全真实,如果你的 TLS 栈看起来像 OpenSSL 而不是 Chrome,也无济于事。

为什么住宅代理比数据中心代理效果更好?

住宅代理通过真实 ISP 分配的 IP 地址路由流量。反机器人系统会检查每个传入 IP 的 ASN(自治系统编号)。数据中心 IP 属于知名 ASN(AWS、GCP 等),在高安全性网站上会被默认封锁。住宅 IP 属于 Comcast 或 BT 等 ISP,使其在网络层面与真实用户流量无法区分。有关性能差异的完整分解,请参阅我们的数据中心与住宅代理比较

支持支付宝等多种支付方式

Daniel Shashko

高级 SEO 专家

6 years experience

Daniel Shashko 是 Bright Data 的高级 SEO/GEO 专家,专注于 B2B 营销、国际 SEO,以及开发 AI 驱动的代理、应用与网页工具。