如何降低爬虫检测风险:完整指南

避免网页刮掉时检测的全面多层指南——涵盖IP旋转,HTTP头,TLS指纹,浏览器指纹,行为模式,以及会话管理.

如何降低爬虫检测风险:完整指南

为什么侦测事件

网络刮刮检测是一个多层次的过程. 反机器人系统不依赖单一信号——它们结合了IP声誉,HTTP头, TLS 指纹, (中文). 浏览器指纹,并进行行为分析以计算风险分数。 当分数超过阈值时,你就会被封锁,服务于CAPTCHA,或者提供误导数据.

本指南为减少所有层面的检测提供了综合方法。 有关这些系统如何运作的概述,见我们关于 反机器人系统如何检测代理。 。 。

第1层: IP 声誉和代理选择

您的IP地址是服务器看到的第一件事 。 Anti-bot系统维护按类型,历史和行为来评分IP地址的数据库.

代理类型选择

代理类型检测风险最佳时间
住所低级大部分的刮刮任务,保护地点
ISP(稳定居住)长会、账目
数据中心高级无保护的站点, 大量的任务
移动极低最高保护地点、社交媒体

对于大多数刮刮项目, 代理哈特的住宅代理 提供低检测风险和成本效益的最佳平衡。 见我们的细节 代理类型比较 以示指导。

IP 轮换战略

# Python: Rotating proxy per request using ProxyHat
import requests
proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
proxies = {
    "http": proxy_url,
    "https": proxy_url
}
# Each request through the gateway gets a different IP
for url in urls_to_scrape:
    response = requests.get(url, proxies=proxies, timeout=30)
    process(response)
  • 每个请求旋转 用于列表页面和搜索结果。
  • 使用粘贴的会话 用于多页流(涂鸦、登录序列)。
  • 地理目标您的IP 以匹配网站的预期观众使用 代理哈特的目标位置。 。 。

第二层: HTTP 信头

错误或缺失的HTTP头是反机器人系统最容易侦测的信号之一. 一个真实的浏览器按特定的顺序发送15-20个头;一个默认的Python脚本发送3-4.

基本标题

# Python: Realistic header set
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.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",
    "Cache-Control": "max-age=0",
    "Sec-Ch-Ua": '"Chromium";v="131", "Not_A Brand";v="24"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
    "Connection": "keep-alive"
}
response = requests.get(url, headers=headers, proxies=proxies)

信头一致性规则

  • 用用户代理匹配 Sec-Ch-Ua : 如果你声称Chrome 131,你的 Sec-Ch-Ua 必须参考131版本。
  • 包含全部 Sec- Fetch 信头 : 现代的Chrome发送这些 在每一个导航。 缺少它们是一个强大的机器人信号。
  • 设定接受语言以匹配您的代理地理 : 一个美国代理 Accept-Language: ja-JP 这是可疑的。
  • 维持信头顺序 : 一些反机器人系统检查头命令。 使用保存插入顺序的库 。

第3层: TLS 和 HTTP/2 指纹

您的 HTTP 客户端库生成一个独特的 TLS 指纹 那个反机器人系统 检查你声称的用户代理。 一个带有 Python TLS 指纹的 Chrome 用户代理被立即标记 。

按语文分列的缓解措施

语言默认库检测风险浏览器- 梯度选项
Py请求/请求3甚高楼带有假名的卷曲 cffi
节点.js轴/齿高级开始刮
走开净额/http甚高楼uTLS + 自定义运输
# Python: Browser-grade TLS with curl_cffi
from curl_cffi import requests as curl_requests
response = curl_requests.get(
    "https://example.com",
    impersonate="chrome",
    proxies={
        "http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
        "https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
    }
)

第4层:浏览器指纹

如果您正在使用无头浏览器, 反机器人 JavaScript 将探测您的 浏览器指纹 —— Canvas, WebGL, AudioContext, 导航器属性. 关键原则是内部一致性:

  • 所有指纹信号必须相互一致
  • 指纹必须符合您的用户代理请求
  • 当您旋转代理时, 指纹会改变

隐形配置

// Node.js: Puppeteer with stealth and proxy
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--proxy-server=http://gate.proxyhat.com:8080',
    '--disable-blink-features=AutomationControlled',
    '--window-size=1920,1080'
  ]
});
const page = await browser.newPage();
await page.authenticate({
  username: 'USERNAME',
  password: 'PASSWORD'
});
await page.setViewport({ width: 1920, height: 1080 });

第5层:行为模式

即使有完美的技术模仿,类似机器人的行为模式也会触发检测. 反机器人系统分析时机,导航模式,和相互作用的签名.

请求时间

  • 添加随机延迟 : 人类不会在准确的时间间隔内提出请求。 在请求间添加1-5秒的随机延迟.
  • 按页面类型分列的重复延迟 : 内容页应该比列表页更长时间的"阅读"暂停.
  • 避免爆发模式 : 不要提出50个快速请求然后暂停。 以自然差异均衡分配请求 。
# Python: Natural request timing
import time
import random
def scrape_with_natural_timing(urls, proxies):
    for url in urls:
        response = requests.get(url, proxies=proxies, headers=headers)
        process(response)
        # Random delay: 1-4 seconds with normal distribution
        delay = max(0.5, random.gauss(2.5, 0.8))
        time.sleep(delay)

导航模式

  • 遵循自然路径 : 先访问主页,然后是分类页,然后是细节页——而不是直接跳转到深层URL.
  • 设置合适的引用页眉 : 每页均应以上一页作为参考。
  • 处理方向调整 : 跟随HTTP进行自然重定向,而不是重试原始的URL.

会话管理

  • 维护饼干罐 : 在会话内接受并返回饼干——抛弃所有的饼干是一个bot信号.
  • 限制会话长度 : 50-100个请求后,用新鲜的IP和cookie开始新的会话.
  • 尊重率限制 : 如果收到429个回复, 退后指数化而不是立即重试。

第6层: 响应验证

侦测并不总是导致一个阻断。 网站可能服务于不同的内容,注入误导数据,或者返回软块. 总是验证您的回复 :

  • 检查状态代码 : 200并不一定意味着成功——有些网站返回200页的CAPTCHA页面或空内容.
  • 验证内容结构 : 确保应对措施包含预期要素(产品价格、条款案文等)。
  • 蜜壶监测器: 隐藏链接或形成字段,旨在捕捉自动爬行者.
  • 音轨成功率 : 如果你的成功率下降到90%以下, 事情已经改变,需要调查。

综合反侦查清单

行动优先权
执行伙伴使用带有地理目标的住宅代理关键
执行伙伴每个请求或会话旋转 IP关键
页眉发送完整、现实的头集关键
页眉将接受语言匹配到代理服务器位置高级
TLS 磁盘使用浏览器级 TLS 库关键
TLS 磁盘将 TLS 指纹匹配到声称的浏览器关键
浏览器对无头浏览器使用隐形插件高级
浏览器保持一致的指纹配置高级
行为在请求间添加随机延迟高级
行为遵循自然导航路径中型
行为在会话内保留 cookie中型
验证检查响应内容, 而不仅仅是状态代码高级

示例: 全面反检测

# Python: Complete anti-detection scraper setup
from curl_cffi import requests as curl_requests
import time
import random
class StealthScraper:
    def __init__(self, proxy_user, proxy_pass):
        self.proxy = f"http://{proxy_user}:{proxy_pass}@gate.proxyhat.com:8080"
        self.session = curl_requests.Session(impersonate="chrome")
        self.session.proxies = {
            "http": self.proxy,
            "https": self.proxy
        }
        self.request_count = 0
    def get(self, url, referer=None):
        headers = {}
        if referer:
            headers["Referer"] = referer
        response = self.session.get(url, headers=headers, timeout=30)
        self.request_count += 1
        # Rotate session every 50-80 requests
        if self.request_count >= random.randint(50, 80):
            self._rotate_session()
        # Natural delay
        time.sleep(max(0.5, random.gauss(2.0, 0.6)))
        return response
    def _rotate_session(self):
        self.session = curl_requests.Session(impersonate="chrome")
        self.session.proxies = {
            "http": self.proxy,
            "https": self.proxy
        }
        self.request_count = 0
# Usage
scraper = StealthScraper("USERNAME", "PASSWORD")
home = scraper.get("https://example.com")
listing = scraper.get("https://example.com/products", referer="https://example.com")
detail = scraper.get("https://example.com/products/123", referer="https://example.com/products")

何时升级您的接近

从最简单的方法开始,只有在需要时才会升级:

  1. 1级 — HTTP 客户端 + 标题+ 代理 : 在大多数网站工作。 使用 curl_cffigot-scraping代理代词。 。 。
  2. 2级 — 添加浏览器级 TLS : 现场检查JA3/JA4指纹时需要。
  3. 第三级——无头浏览器+隐形: 需要JavaScript上交的内容和复杂的反机器人系统.
  4. 第4级——完全浏览器自动化与行为模仿: 为最受保护的场所(Cloudflare Entertainment、PerimeterX等)保留。

关于具体语言的执行模式,参见我们的指南: Py, (中文). 节点.js,以及 走开。 。 。

道德准则

反检测技术是工具——其道德用途取决于背景. 总是:

  • 尊重机器人.txt和服务条件
  • 仅搜索公开数据
  • 限制请求率以避免服务器撞击
  • 遵守数据保护条例(GDPR、CCPA)
  • 使用 道德刮刮做法 作为基线
反侦查的目的不是绕过合法安全. 这是为了确保您自动访问公共数据不会被错误地标为恶意。

经常被问到的问题

准备开始了吗?

通过AI过滤访问148多个国家的5000多万个住宅IP。

查看价格住宅代理
← 返回博客