返回博客
Aug. 11th 2025

如何使用Nstproxy住宅代理抓取亚马逊产品数据

无代理抓取亚马逊意味着即时 IP 禁止和无尽的验证码。学习如何使用 Nstproxy 居民代理可靠地抓取产品数据,绕过检测,并扩大你的电子商务智能。

在没有代理的情况下抓取亚马逊是一场注定失败的战斗。
您很快就会遇到IP禁止、无尽的验证码,并在收集任何有用信息之前被限速。
亚马逊的反机器人系统是互联网上最强大的。

为了保持低调,代理是必不可少的。
在这篇文章中,我们将向您展示如何有效地使用 Nstproxy的住宅代理 来抓取亚马逊——一种可靠的提取产品数据而不被阻止的方法。


为什么您需要代理来抓取亚马逊

亚马逊采用了激进的反抓取技术:

  • IP跟踪与限速
  • 机器人行为检测
  • 地理屏蔽
  • JavaScript挑战与验证码

不使用代理,从单一IP发送多个请求会很快被标记。

住宅代理,就像来自Nstproxy的那样,可以模拟来自真实设备和ISP的真实用户流量,使您的抓取程序看起来是合法的。


为什么选择Nstproxy住宅代理?

Nstproxy提供:

  • 9000万+ IP来自195+个国家
  • SOCKS5HTTP/HTTPS支持
  • 会话控制,支持粘性或轮换IP
  • 优化的网关路由(美国、欧洲、亚太)

✅ 理想用于大规模亚马逊抓取价格监控竞争对手研究


最适合亚马逊的代理类型:轮换住宅代理

代理类型比较:

代理类型 优点 缺点
数据中心 快速 容易被封锁
移动 极为匿名 昂贵
住宅 高匿名性,价格合理,有效 最适合亚马逊使用的最佳平衡

🔹 对于亚马逊抓取,轮换住宅代理是最有效的——它们提供来自真实用户的真实IP,并定期轮换以避免被检测。


使用Python设置Nstproxy

购买代理计划后:

  1. 转到仪表板中的代理设置
  2. 从代码语言选项中选择Python
  3. 复制带有您的凭据的现成代码段

以下是如何在Python抓取程序中使用Nstproxy住宅代理与requests库:

username = '您的用户名'
password = '您的密码'
host = 'gate.nstproxy.io'
port = '24125'

proxy = f'http://{username}:{password}@{host}:{port}'
proxies = {
    "http": proxy,
    "https": proxy
}

完整的亚马逊抓取脚本示例

这是针对https://www.amazon.com/s?k=apple的整个亚马逊抓取脚本:

import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import pandas as pd

username = 'YOUR Nstproxy Username'
password = 'Your password'
host = 'gate.nstproxy.io'
port = '24125'

proxy = f'http://{username}:{password}@{host}:{port}'
proxies = {
    "http": proxy,
    "https": proxy
}

custom_headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
    'Accept-Language': 'da, en-gb, en',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.7',
    'Referer': 'https://www.google.com/'
}


def parse_listing(listing_url, visited_urls, current_page=1, max_pages=2):
    resp = requests.get(
        listing_url, headers=custom_headers, proxies=proxies
    )
    print(resp.status_code)
    soup_search = BeautifulSoup(resp.text, 'lxml')
    link_elements = soup_search.select(
        '[data-cy="title-recipe"] > a.a-link-normal'
    )

    page_data = []

    for link in link_elements:
        full_url = urljoin(listing_url, link.attrs.get('href'))
        if full_url not in visited_urls:
            visited_urls.add(full_url)
            print(f'Scraping product from {full_url[:100]}', flush=True)
            product_info = get_product_info(full_url)
            if product_info:
                page_data.append(product_info)
                time.sleep(random.uniform(3, 7))

    next_page_el = soup_search.select_one('a.s-pagination-next')
    if next_page_el and current_page < max_pages:
        next_page_url = next_page_el.attrs.get('href')
        next_page_url = urljoin(listing_url, next_page_url)
        print(
            f'Scraping next page: {next_page_url}'
            f'(Page {current_page + 1} of {max_pages})',
            flush=True
        )
        page_data += parse_listing(
            next_page_url, visited_urls, current_page + 1, max_pages
        )

    return page_data


def get_product_info(url):
    resp = requests.get(url, headers=custom_headers, proxies=proxies)
    if resp.status_code != 200:
        print(f'Error in getting webpage: {url}')
        return None

    soup = BeautifulSoup(resp.text, 'lxml')

    title_element = soup.select_one('#productTitle')
    title = title_element.text.strip() if title_element else None

    price_e = soup.select_one('#corePrice_feature_div span.a-offscreen')
    price = price_e.text if price_e else None

    rating_element = soup.select_one('#acrPopover')
    rating_text = rating_element.attrs.get('title') if rating_element else None
    rating = rating_text.replace('out of 5 stars', '') if rating_text else None

    image_element = soup.select_one('#landingImage')
    image = image_element.attrs.get('src') if image_element else None

    description_element = soup.select_one(
        '#productDescription, #feature-bullets > ul'
    )
    description = (
        description_element.text.strip() if description_element else None
    )

    return {
        'title': title,
        'price': price,
        'rating': rating,
        'image': image,
        'description': description,
        'url': url
    }


def main():
    visited_urls = set()
    search_url = 'https://www.amazon.com/s?k=apple'
    data = parse_listing(search_url, visited_urls)
    df = pd.DataFrame(data)
    df.to_csv('apple.csv', index=False)


if __name__ == '__main__':
    main()

顺利抓取亚马逊的提示

  1. 轮换用户代理 — 避免反复使用同一个
  2. 明智使用会话 — 通过 sessionDuration 实现粘性(例如,登录)
  3. 随机延迟time.sleep(random.uniform(1, 3))
  4. 错误处理 — 在 503 / 429 时进行重试,采用指数回退
  5. CAPTCHA 检测 — 被触发时切换到新会话

挑战与解决方案

挑战 解决方案
IP阻塞 使用 Nstproxy 轮换住宅代理
速率限制 添加延迟并轮换IP和头部
结构变化 手动检查DOM,并相应调整选择器

最后的想法

抓取亚马逊很困难 — 但并非不可能
通过 Nstproxy 的住宅代理,轮换 IP 和现实的浏览行为,您可以大规模收集高价值的产品数据而不被封锁

🚀 立即开始您的 Nstproxy 试用 — 免费 5GB
需要集成帮助?我们随时为您提供协助。

Lena Zhou
Lena ZhouGrowth & Integration Specialist
目录

Nstproxy

利用 NST 代理扩大业务规模

Nstproxy
© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED