如何在爬取Amazon时避免IP封锁

了解亚马逊的IP禁用系统,学习经过验证的策略以避免检测. 涵盖住宅代理配置,请求随机化,地理目标化,以及回收程序.

如何在爬取Amazon时避免IP封锁

了解亚马逊的IP禁用系统

亚马逊运营着互联网上最复杂的反机器人系统之一. 当你的IP地址被禁时,你就会失去获取产品数据的机会,这些数据会推动你的定价,研究和竞争性智能操作. 了解亚马逊如何检测和禁止IP是防止它的第一步.

亚马逊并非简单地封锁单个IP——它构建了行为简介. 一个单一的可疑IP可能会触发软块(CAPTCHAs),而持续的违规导致硬块(完全访问拒绝). 系统追踪整个IP范围的图案,因此获得一个IP禁用可以加强对邻近地址的检查. 关于对侦查方法的全面了解,见我们关于 反机器人系统如何检测代理。 。 。

亚马逊如何检测自动交通

亚马逊探测器同时在多个层上运行.

请求级别检测

信号亚马逊检查风险水平
TLS 指纹TLS 握手匹配已知的 bot 库( Python 请求, 卷曲)高级
标题顺序按非浏览器顺序发送的 HTTP 信头中型
缺少信头不接受语言、接受编码等。高级
用户代理过时、 无效或已知的机器人用户代理字符串高级
饼干处理不接受或返回会话 cookie中型

行为检测

图案说明风险水平
固定间隔准确间隔的请求(每5.0秒)高级
顺序爬行按数字或字母顺序访问ASIN高级
无导航路径不浏览直接跳转到产品页面中型
高要求量一个执行伙伴每分钟提出数百项请求关键
没有 JavaScript 执行不执行 JavaScript 而装入的页面中型

IP级检测

亚马逊维持数据中心IP范围和已知代理供应商的数据库. 无论行为如何,数据中心实施伙伴都立即面临强化审查。 住宅综合方案 因为他们和真正的亚马逊购物者共用游泳池

亚马逊区类型

了解不同的块类型有助于你作出适当的反应。

软块( CAPTCHA)

最常见的反应。 亚马逊服务于CAPTCHA的页面而不是产品数据. 这是一个警告——从同一个IP继续,你会升级到一个硬块. 当你收到一个CAPTCHA,立即退后并切换到一个新的IP.

硬块( 503/403 错误)

完全拒绝访问,一般返回HTTP 503或403状态代码. 硬块对于特定的IP可以持续数小时到数天. 一旦硬锁起来,该IP实际上无法用于亚马逊,直到块过期.

内容操纵

亚马逊有时对可疑的bots提供不同的内容——不正确的价格,缺少评论,或者产品数据不完整. 这更难侦测 因为你收到了200个回复 根据已知的数值验证您已删除的数据以获取此数据 。

关键外卖:CAPTCHA是警告信号,而不仅仅是障碍. 将每个 CAPTCHA 当作一个指标 , 您当前的方法需要调整 。

预防战略

1. 使用住宅代理

这是你能做的最具影响力的改变。 居民代理使用分配给真正的互联网用户的IP地址,使您的请求与真正的购物者无法区分. 代理Hat的住宅代理池覆盖了195+国家,拥有数百万IP.

# ProxyHat residential proxy with geo-targeting
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# For Amazon.de
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# For Amazon.co.uk
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080

2. 实施智能旋转

永远不要从一个IP发送超过5-10个请求到亚马逊. 代理Hat的网关默认会自动旋转每个请求的IP,但您也应该实施应用程序级控制.

import requests
import random
import time
PROXY_BASE = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def make_request(url, max_retries=3):
    """Make a request with automatic retry on failure."""
    for attempt in range(max_retries):
        # Each request gets a fresh IP from the rotating proxy
        proxies = {"http": PROXY_BASE, "https": PROXY_BASE}
        headers = {
            "User-Agent": random.choice(USER_AGENTS),
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "en-US,en;q=0.9",
            "Accept-Encoding": "gzip, deflate, br",
        }
        try:
            response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            # Check for CAPTCHA
            if "captcha" in response.text.lower() or response.status_code == 503:
                print(f"CAPTCHA/block detected on attempt {attempt + 1}")
                time.sleep(random.uniform(10, 30))  # Longer backoff
                continue
            if response.status_code == 200:
                return response
        except requests.RequestException:
            time.sleep(random.uniform(5, 15))
    return None

3. 随机请求模式

您的请求模式的每个方面都应该包括随机性以避免统计检测.

import random
import time
def random_delay(min_sec=2, max_sec=7):
    """Add human-like random delay."""
    delay = random.uniform(min_sec, max_sec)
    # Occasionally add a longer pause (simulates reading a page)
    if random.random() < 0.1:  # 10% chance
        delay += random.uniform(10, 30)
    time.sleep(delay)
def shuffle_targets(urls):
    """Randomize the order of URLs to avoid sequential patterns."""
    shuffled = urls.copy()
    random.shuffle(shuffled)
    return shuffled
def get_random_user_agent():
    """Return a realistic, current User-Agent string."""
    agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    ]
    return random.choice(agents)

4. 地理定位与市场匹配

从德国IP或amazon.de从日本IP访问amazon.com是自动化活动的强烈信号. 总是匹配您的代理地址 到目标市场。

市场代理国代理汉特配置
amazon.com (英语).美国USERNAME-country-US
(原始内容存档于2018-09-29). amazon.co.uk联合王国USERNAME-country-GB
阿马松.de德国USERNAME-country-DE
amazon.co.jp (英语).日本USERNAME-country-JP
Amazon.fr (英语).法国USERNAME-country-FR
Amazon.in (英语).印度USERNAME-country-IN

检查 代理哈特的完整位置列表 对所有支助国而言。

5. 妥善处理会议

亚马逊通过饼干跟踪会话. 接受和返回 cookie 使您的请求看起来更像一个真正的浏览器. 对于paged浏览(搜索结果,评论),使用粘贴的会话来维持同一个IP和cookie罐.

# Sticky session for paginated scraping
PROXY_SESSION = "http://USERNAME-session-amz{session_id}:PASSWORD@gate.proxyhat.com:8080"
def create_session(session_id):
    """Create a requests session with sticky proxy and cookies."""
    session = requests.Session()
    proxy = PROXY_SESSION.format(session_id=session_id)
    session.proxies = {"http": proxy, "https": proxy}
    session.headers.update({
        "User-Agent": get_random_user_agent(),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    })
    return session

6. 监测您的成功率

跟踪您的 HTTP 200 速率, CAPTCHA速率, 和块速率实时 。 设定阈值, 当检测增加时自动节流。

class SuccessTracker:
    def __init__(self, captcha_threshold=0.1, block_threshold=0.05):
        self.total = 0
        self.success = 0
        self.captchas = 0
        self.blocks = 0
        self.captcha_threshold = captcha_threshold
        self.block_threshold = block_threshold
    def record(self, status):
        self.total += 1
        if status == "success":
            self.success += 1
        elif status == "captcha":
            self.captchas += 1
        elif status == "block":
            self.blocks += 1
    @property
    def should_throttle(self):
        if self.total < 10:
            return False
        captcha_rate = self.captchas / self.total
        block_rate = self.blocks / self.total
        return captcha_rate > self.captcha_threshold or block_rate > self.block_threshold
    @property
    def success_rate(self):
        return self.success / self.total if self.total > 0 else 0

禁令后恢复

如果一个IP被禁止,这里就是如何恢复:

  1. 立即停止: 不要继续发送来自被禁IP或附近IP的请求.
  2. 切换 IP : 使用一组来自不同范围的新型住宅IP. 代理Hat的大型游泳池确保你总是有干净的IP可用.
  3. 调整您的方法 : 在恢复前审查您的请求模式、 延迟和信头 。
  4. 慢慢开始 : 恢复时,从低请求率开始,并逐步增加.
  5. 等待出来: 亚马逊禁令一般在软块24-48小时内到期,硬块在特定IP上最长7天.

节点.js 禁止

这里有一个对应的节点.js执行 代理哈特节点 SDK。 。 。

const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080";
const USER_AGENTS = [
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
];
async function safeAmazonRequest(url, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const agent = new HttpsProxyAgent(PROXY_URL);
    try {
      const response = await axios.get(url, {
        httpsAgent: agent,
        headers: {
          "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
          "Accept-Language": "en-US,en;q=0.9",
          Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Encoding": "gzip, deflate, br",
        },
        timeout: 30000,
        validateStatus: () => true,
      });
      if (response.data.toLowerCase().includes("captcha") || response.status === 503) {
        console.log(`CAPTCHA/block on attempt ${attempt + 1}`);
        await new Promise((r) => setTimeout(r, 10000 + Math.random() * 20000));
        continue;
      }
      if (response.status === 200) return response;
    } catch (err) {
      await new Promise((r) => setTimeout(r, 5000 + Math.random() * 10000));
    }
  }
  return null;
}
// Random delay between requests
function randomDelay(minMs = 2000, maxMs = 7000) {
  const delay = minMs + Math.random() * (maxMs - minMs);
  return new Promise((r) => setTimeout(r, delay));
}

预防核对清单

在运行任何 Amazon 刮刮器前使用此核对表 :

  • 使用住宅代理( 不是数据中心)
  • 代理地理定位匹配目标市场
  • 用户代理字符串是当前和旋转的
  • 包含所有标准浏览器头
  • 请求延迟为随机( 最少2-7 秒)
  • URL 已洗牌, 不按顺序处理
  • Cookie 处理已启用
  • CAPTCHA 探测和自动后退到位
  • 正在对成功率进行监测
  • 货币有限(从5-10个平行请求开始)

关键外卖

  • 亚马逊的探测是多层次的:请求指纹,行为模式,以及IP的声誉都很重要.
  • 住宅代用品是不可谈判的——数据中心IP立即面临强化审查.
  • 匹配代理地理定位到目标亚马逊市场.
  • 随机所有:延迟,用户代理,请求顺序,以及会话模式.
  • 将CAPTCHA作为预警,立即调整.
  • 监测成功率,发现增加时自动节流.

将完整的亚马逊刮刮装置改为: 亚马逊产品数据刮刮指南 并探索完整的 电子商务报废战略开始 代理哈特的住宅代理 为可靠的亚马逊访问。

准备开始了吗?

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

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