【2026】亚马逊数据抓取教程:如何用Python采集商品价格与评论

亚马逊拥有大量公开的商品信息,包括商品标题、价格、评分、评论数量、品牌、商品图片和销售排名等。对于跨境电商卖家、市场研究人员和数据分析团队来说,这些数据可以用于竞品监控、价格分析、选品研究和市场趋势判断。

但是,当采集任务从几个商品扩展到多个关键词、多个类目或不同国家站点时,人工整理数据的效率会迅速下降。这时,可以使用Python建立自动化的亚马逊数据抓取流程。

本文将介绍如何使用Python和Playwright采集亚马逊公开商品页面中的数据,并将结果保存为CSV文件。同时,我们还会讲解分页采集、代理IP配置和常见问题。

本文仅用于公开数据研究和技术学习。开展数据采集前,应确认目标页面的服务条款、robots.txt、数据授权范围和当地法律要求,不应采集个人敏感信息,也不应绕过登录、验证码或其他访问控制。Amazon的服务使用需要遵守其相关使用条件。

为什么要抓取亚马逊商品数据?

亚马逊商品数据通常可以应用在以下几个场景。

1. 竞争对手价格监控

卖家可以定期记录竞品价格、优惠信息和库存状态,观察竞争对手是否进行了降价、促销或产品调整。

相比每天手动打开商品页面,自动化程序可以按照固定时间采集数据,并生成价格变化记录。

2. 亚马逊选品分析

通过采集某个关键词或类目下的商品,可以获得:

  • 商品标题
  • 品牌名称
  • 当前价格
  • 用户评分
  • 评论数量
  • ASIN
  • 商品链接
  • 商品图片

将这些数据整理到Excel或数据库后,可以进一步分析产品竞争程度、价格区间和用户需求。

3. 评论与市场需求研究

商品评分和评论数量可以帮助判断产品的市场成熟度。

如果某类商品的搜索结果数量较少,但部分产品的评论增长较快,可能说明该类目正在获得更多关注。不过,评论数据只能作为参考,还需要结合销量、价格和市场趋势综合判断。

4. 多站点商品信息对比

亚马逊在美国、英国、德国、日本等地区拥有不同站点。同一商品在不同市场中的价格、排名和用户反馈可能存在明显差异。

通过采集不同国家站点的公开数据,可以进行区域价格比较和市场需求分析。

亚马逊数据采集有哪些方式?

目前常见的Amazon数据获取方式主要有三种。

方法一:使用Amazon官方API

对于符合Amazon联盟及相关业务规则的应用,优先考虑官方提供的数据接口。

需要注意的是,Amazon官方文档显示,Product Advertising API已经于2026年5月15日停止使用并迁移至Creators API,新项目不应继续按照旧版PA-API教程接入。

官方API通常具有数据结构清晰、维护成本较低的优势,但可能存在申请条件、调用额度和数据用途限制。

方法二:使用Python抓取公开网页

如果需要研究公开搜索结果页、商品列表或自有业务允许使用的数据,可以通过Python解析网页。

对于结构简单的静态页面,可以使用Requests和BeautifulSoup;对于需要运行JavaScript的动态页面,Playwright通常更加合适。

Playwright支持Chromium、Firefox和WebKit,并同时提供同步和异步Python API。

方法三:使用第三方电商数据服务

如果企业需要长期、大规模采集数据,也可以使用结构化数据API或现成数据集。

这种方式可以减少网页结构变化带来的维护成本,但需要根据更新频率、字段完整度、数据来源和预算进行选择。

免费获取 kookeey 新用户福利 🎁
200MB 动态流量
100MB 移动代理
288元 优惠大礼包
独享IP ISP 支持独享端口 / API 调用

使用Python抓取亚马逊需要准备什么?

本教程将使用以下工具:

  • Python 3.9或更高版本
  • Playwright
  • Pandas
  • Chromium浏览器组件

首先创建项目文件夹:

mkdir amazon-data-scraper 
cd amazon-data-scraper

然后安装所需依赖:

pip install playwright pandas
playwright install chromium

Playwright除了安装Python软件包,还需要单独安装浏览器组件。其官方文档同样要求在安装软件包后执行playwright install

使用Playwright采集亚马逊商品数据

在项目文件夹中创建一个名为amazon_scraper.py的文件,并加入以下代码:

import time
from urllib.parse import quote_plus

import pandas as pd
from playwright.sync_api import sync_playwright


KEYWORD = "wireless headphones"
MAX_PAGES = 2


def get_text(locator, default=""):
    """安全读取元素文本,元素不存在时返回默认值。"""
    try:
        if locator.count() > 0:
            return locator.first.inner_text().strip()
    except Exception:
        pass

    return default


def get_attribute(locator, attribute, default=""):
    """安全读取元素属性。"""
    try:
        if locator.count() > 0:
            value = locator.first.get_attribute(attribute)
            return value or default
    except Exception:
        pass

    return default


def scrape_amazon():
    results = []

    with sync_playwright() as playwright:
        browser = playwright.chromium.launch(headless=True)

        context = browser.new_context(
            locale="en-US",
            viewport={"width": 1440, "height": 1000}
        )

        page = context.new_page()

        search_url = (
            "https://www.amazon.com/s?k="
            + quote_plus(KEYWORD)
        )

        page.goto(
            search_url,
            wait_until="domcontentloaded",
            timeout=60000
        )

        for page_number in range(1, MAX_PAGES + 1):
            page.wait_for_timeout(3000)

            product_items = page.locator(
                'div[data-component-type="s-search-result"]'
            )

            print(
                f"正在处理第 {page_number} 页,"
                f"发现 {product_items.count()} 个商品"
            )

            for index in range(product_items.count()):
                item = product_items.nth(index)

                asin = item.get_attribute("data-asin") or ""

                title = get_text(
                    item.locator("h2 span")
                )

                price = get_text(
                    item.locator(".a-price .a-offscreen")
                )

                rating = get_text(
                    item.locator("span.a-icon-alt")
                )

                review_count = get_text(
                    item.locator(
                        "span.a-size-base.s-underline-text"
                    )
                )

                relative_link = get_attribute(
                    item.locator("h2 a"),
                    "href"
                )

                image_url = get_attribute(
                    item.locator("img.s-image"),
                    "src"
                )

                if relative_link.startswith("/"):
                    product_url = (
                        "https://www.amazon.com"
                        + relative_link
                    )
                else:
                    product_url = relative_link

                if title:
                    results.append({
                        "keyword": KEYWORD,
                        "asin": asin,
                        "title": title,
                        "price": price,
                        "rating": rating,
                        "review_count": review_count,
                        "product_url": product_url,
                        "image_url": image_url
                    })

            next_button = page.locator(
                "a.s-pagination-next"
            )

            if (
                page_number >= MAX_PAGES
                or next_button.count() == 0
            ):
                break

            next_href = next_button.first.get_attribute("href")

            if not next_href:
                break

            page.goto(
                "https://www.amazon.com" + next_href,
                wait_until="domcontentloaded",
                timeout=60000
            )

            # 控制访问频率,避免给目标站点造成过大负担
            time.sleep(5)

        browser.close()

    return results


if __name__ == "__main__":
    product_data = scrape_amazon()

    dataframe = pd.DataFrame(product_data)

    dataframe.to_csv(
        "amazon_products.csv",
        index=False,
        encoding="utf-8-sig"
    )

    print(
        f"采集完成,共保存 {len(product_data)} 条商品数据。"
    )

运行程序:

python amazon_scraper.py

采集结果会保存到:

amazon_products.csv

CSV文件中包含关键词、ASIN、商品标题、价格、评分、评论数量、商品链接和图片链接等字段。

为什么亚马逊页面适合使用Playwright?

部分电商页面会通过JavaScript加载内容。使用普通HTTP请求时,程序获得的HTML可能不完整,导致价格、评论或商品列表无法正常提取。

Playwright会启动真实浏览器环境,能够等待页面加载并读取浏览器渲染后的内容,因此更适合处理动态网页。

不过,浏览器自动化会消耗更多内存和计算资源。如果采集任务规模较大,需要控制浏览器实例数量,并避免同时开启过多页面。

如何给Playwright配置代理IP?

在多地区电商数据研究中,网络出口地区可能影响页面语言、币种、配送范围和商品展示结果。

例如,研究美国站点时,可以使用美国代理线路;研究日本站点时,则需要保持日本网络出口、语言环境和目标站点一致。

kookeey 全球代理IP点击按钮免费试用
【2026】亚马逊数据抓取教程:如何用Python采集商品价格与评论

在Playwright中,可以在启动浏览器时配置代理:

browser = playwright.chromium.launch(
    headless=True,
    proxy={
        "server": "http://gate.kookeey.info:1000",
        "username": "YOUR_USERNAME",
        "password": "YOUR_PASSWORD"
    }
)

请将示例中的用户名和密码替换为实际的kookeey代理认证信息。

kookeey代理信息如何填写?

在Playwright中接入kookeey代理,需要将后台生成的代理地址、端口、用户名和密码填写到代理配置中。

假设kookeey后台生成的代理信息格式为:

代理地址:端口:用户名:密码

对应到Playwright代码中:

  • server:填写代理协议、代理地址和端口
  • username:填写代理用户名
  • password:填写代理密码

例如,后台生成的代理信息为:

gate.kookeey.info:1000:your_username:your_password

那么代码应填写为:

browser = playwright.chromium.launch(
    headless=True,
    proxy={
        "server": "http://gate.kookeey.info:1000",
        "username": "your_username",
        "password": "your_password"
    }
)

如何生成kookeey动态线路

现在kookey官网充值 加赠 22%,新人还可直接领取 200MB 的试用流量包:立即领取免费流量

所以先充值再购买比直接购买会更划算,充值多少我们按需求;

【2026】亚马逊数据抓取教程:如何用Python采集商品价格与评论

购买1元购大礼包

– 1元购里有10💴的无门槛券,我们购买后会叠加享受优惠价;

图片

购买流量包提取线路

– kookeey动态产品是按流量计费,只要我们有流量就能直接提取线路;

系统会生成一组代理连接信息,通常包括:

  • 代理地址
  • 端口
  • 用户名
  • 密码
  • 协议类型

用户可以将这组信息复制下来,配置到浏览器、Python 脚本、指纹浏览器或其他自动化工具中。

如何检测代理是否配置成功?

完成代理配置后,可以访问IP检测页面,查看当前浏览器使用的出口IP:

page = browser.new_page()

page.goto(
    "https://lumtest.com/myip.json",
    wait_until="domcontentloaded"
)

print(page.locator("body").inner_text())

如果页面返回的IP地址和代理地区与kookeey后台选择的线路一致,说明代理已经配置成功。

配置代理时,应尽量保持以下条件一致:

  • 目标Amazon站点
  • 代理IP所在国家
  • 浏览器语言
  • 页面币种
  • 时区设置
  • 数据采集任务的地区需求

代理IP主要用于提供稳定、匹配目标区域的网络连接,并不代表可以忽略网站规则或突破访问限制。

亚马逊数据抓取常见问题

1. 为什么抓不到商品价格?

部分商品可能存在多个规格、优惠券、会员价格或卖家报价,因此搜索结果页不一定显示统一价格。

程序应允许价格字段为空,不要因为单个字段缺失而直接删除整个商品记录。

2. 为什么商品选择器失效了?

电商网站会持续调整页面结构和CSS类名。代码运行一段时间后,如果突然无法提取数据,需要重新检查网页元素。

建议优先使用相对稳定的属性,例如:

div[data-component-type="s-search-result"]

同时,应为标题、价格和评论数设置备用选择器。

3. 为什么不同地区看到的商品不一样?

商品搜索结果可能受到站点、配送地址、币种、语言、库存和网络地区等因素影响。

因此,做多地区数据对比时,应记录采集时间、目标站点和代理地区,避免把不同环境下的数据直接混合。

4. 如何处理分页?

亚马逊搜索结果通常包含多个页面。程序可以读取“下一页”按钮的链接,并在每次采集完成后进入下一页。

需要设置最大页数,避免因为页面异常或链接循环导致程序无限运行。

5. 应该使用动态住宅代理还是静态代理?

如果任务主要是采集不同地区的公开商品结果,可以根据任务规模使用动态住宅代理。

如果需要长期保持同一网络出口,对固定地区进行连续测试或页面验证,则可以考虑静态住宅代理。

具体选择应根据任务持续时间、地区数量、请求规模和稳定性要求决定。

如何提高亚马逊数据采集质量?

一个稳定的数据采集项目不能只关注“能否打开页面”,还需要关注数据是否完整、准确和可追踪。

建议在项目中增加以下机制:

设置合理的访问频率

不要在短时间内连续请求大量页面。可以在每页任务之间设置固定间隔,并限制并发数量。

保存采集时间

为每条数据增加采集时间字段,方便后续分析价格变化。

记录失败原因

将超时、页面为空、字段缺失和状态异常分别记录,便于后续排查。

定期检查页面结构

建议定期运行小规模测试,确认商品标题、价格和评分等主要字段是否仍能正常提取。

对数据进行清洗

价格字段可能包含货币符号和千位分隔符,评论数量也可能使用“K”等缩写。进入数据库前,应统一格式并处理空值。

总结

亚马逊数据抓取可以帮助跨境电商团队完成商品监控、价格分析、选品研究和市场趋势判断。

对于符合官方接口应用条件的项目,2026年应优先评估Amazon Creators API,而不是继续按照已经停止使用的PA-API教程接入。对于公开网页研究,可以使用Python和Playwright建立小规模、低频率的数据采集流程。

当任务涉及不同国家站点时,稳定且地区匹配的代理IP能够减少网络环境差异,提高数据采集的一致性。通过kookeey动态住宅代理、静态住宅代理或数据中心代理,可以根据目标地区和任务规模配置相应的网络线路。

无论使用API、浏览器自动化还是代理IP,都应始终遵守目标网站的服务条款、数据授权范围和相关法律要求。

本文来自网络投稿,不代表kookeey立场,如有问题请联系我们

(0)
kookeeykookeey
上一篇 21小时前
下一篇 2023-11-08 11:10

相关推荐

  • HTTP 代理 和 HTTPS 代理有什么区别?

    代理服务器可以充当您的电脑网络和互联网之间的网关。换句话说,它在您的计算机发出的访问网站和服务请求之间充当中间人。为加快浏览速度,您可以在计算机上设置代理,也可以使用在线服务提供商的代理服务。代理有两种形式:HTTP 代理和 HTTPS 代理。 用于通过因特网在计算机之间发送数据的协议称为 HTTP 或超文本传输协议。安全超文本传输协议或 HTTPS 是 H…

    2024-01-25
  • 住宅 IP 代理和数据中心代理的差异有什么?

    数据中心代理实际上也叫机房代理,这样的代理IP被大批量存储在某一位置的机房内。 住宅IP又分为静态住宅和动态住宅。 动态住宅代理IP是真实用户家庭IP,比如你我他家里的IP,这样的IP在被访问网站看来,代表的是真实的个体,真人用户。 静态住宅IP又叫ISP,是电信运营商租用或者出售给代理网络供应商的IP,被标注为住宅使用,这类IP不会轮动,也叫静态IP。 弄…

    2023-12-20
  • 海外IP到底有啥用?一文讲清它在数据采集中的4大价值!

    在大数据和全球化运营的背景下,数据采集早已不再局限于本地环境,越来越多企业和技术团队开始关注一个关键词——海外IP。 你可能会好奇: 这篇文章将用通俗易懂的方式为你全面解读海外IP的核心价值与实用建议,并推荐一款值得信赖的代理IP服务商——kookeey,618大促全场7.5折,是入手海外IP资源的绝佳时机。 一、什么是海外IP?(小白也能秒懂) 简单来说,…

    2025-06-11
  • 高速HTTP代理需要具备哪些特点?

    高速HTTP代理是一种网络代理服务,它可以帮助用户更快地访问互联网资源。HTTP代理服务器充当客户端和服务器之间的中间人,它可以缓存请求和响应,从而减少网络延迟和带宽使用。HTTP代理还可以过滤请求和响应,从而提高网络安全性和隐私保护。 HTTP代理服务器通常由ISP、企业和个人用户使用。ISP可以使用HTTP代理来加速用户的上网体验,减少网络拥塞和带宽成本…

    2023-11-24
  • LinkedIn职场社交策略:利用稳定代理IP提升人脉管理

    LinkedIn人脉拓展:稳定代理IP,助力职场社交的深度剖析 在当今这个信息爆炸、竞争激烈的全球化时代,职场社交显得尤为关键。作为全球最大的职业社交平台,LinkedIn不仅是个人品牌塑造的沃土,更是拓展人脉、发现机遇的重要窗口。然而,在深度挖掘LinkedIn潜力的过程中,不少职场人士遇到了种种挑战,其中,网络限制与账号安全问题尤为突出。本文将深入探讨如…

    2025-03-06