【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
上一篇 2026-07-13 11:11
下一篇 2026-07-16 18:18

相关推荐

  • IP纯净度是什么?如何检测IP纯净度?

    在网络运营、社交媒体营销、跨境电商等领域,IP地址的质量直接影响账号的安全性和稳定性。一个“纯净”的IP地址能够降低封号风险,提高访问权限,而“污染”的IP则可能导致访问受限、验证码频繁弹出甚至账号封禁。那么,IP纯净度是什么?如何检测IP的纯净度?本篇文章将为你详细解析。 1. IP纯净度是什么? IP纯净度是指一个IP地址是否曾被用于恶意行为,是否被各大…

    2025-02-17
  • 什么是动态与静态IP

    简单来说静态IP与动态IP的区别在于:动态需要在连接网络时自动获取地址以供用户正常上网,而静态是ISP在装机时分配给用户的地址,可以直接连接上网,不需要获取地址。 动态IP是什么 动态IP就是指在需要的时候才进行地址分配的方式。所谓动态就是指当你每一次上网时,电信会随机分配一个地址。随用随分配安全性也比较高。动态IP有两种情况:一种是DHCP动态分配,这种动…

    2023-11-10
  • 如何在浏览器中使用socks5代理IP?

    当我们使用socks5代理IP时,我们会发现设置后很难在IE浏览器中打开页面,那么我们使用的代理IP是假的吗?接下来,我们将一起解决这个问题。 一、如何在浏览器中使用socks5代理IP? 与HTTP不同,socks5代理是一个采用socks协议的代理服务器,因此不能直接在IE浏览器上使用。如果我们想在浏览器上使用它怎么办? 1、前期准备: (1)在浏览器上…

    2023-11-24
  • 如何选择合适IP地址用于WhatsApp注册营销

    在全球化日益加深的今天,外贸企业纷纷利用WhatsApp这一强大的通讯工具进行客户沟通和营销活动。然而,在享受WhatsApp带来的便利时,如何选择合适的IP地址进行注册和营销,成为了外贸企业必须面对的重要问题。本文将深入探讨在WhatsApp注册营销中,选择合适的IP地址的必要性和具体策略。 一、WhatsApp注册营销的背景与挑战 WhatsApp以其高…

    2024-09-02
  • 静态和动态代理IP有何区别,适合什么业务?

    在现代网络环境中,代理IP的作用不容小觑。它作为一种有效的网络工具,帮助用户在网上保持匿名性,同时还能绕过地理限制、提高安全性和增强数据收集的能力 在众多类型的代理IP中,静态和动态代理IP是最常见的两种形式。下面我们深入对比静态和动态代理IP的优劣,用户可以更加明智地选择适合自己的代理IP类型,从而在这个数字化日益增长的世界中,保持竞争力和效率。 一、静态…

    2024-01-11