为什么侦测事件
网络刮刮检测是一个多层次的过程. 反机器人系统不依赖单一信号——它们结合了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级 — HTTP 客户端 + 标题+ 代理 : 在大多数网站工作。 使用
curl_cffi或got-scraping与 代理代词。 。 。 - 2级 — 添加浏览器级 TLS : 现场检查JA3/JA4指纹时需要。
- 第三级——无头浏览器+隐形: 需要JavaScript上交的内容和复杂的反机器人系统.
- 第4级——完全浏览器自动化与行为模仿: 为最受保护的场所(Cloudflare Entertainment、PerimeterX等)保留。
关于具体语言的执行模式,参见我们的指南: Py, (中文). 节点.js,以及 走开。 。 。
道德准则
反检测技术是工具——其道德用途取决于背景. 总是:
- 尊重机器人.txt和服务条件
- 仅搜索公开数据
- 限制请求率以避免服务器撞击
- 遵守数据保护条例(GDPR、CCPA)
- 使用 道德刮刮做法 作为基线
反侦查的目的不是绕过合法安全. 这是为了确保您自动访问公共数据不会被错误地标为恶意。






