# 亚马逊

使用网页爬虫API，您可以抓取并解析各种类型的 **亚马逊** 页面；以下是所有受支持的爬虫及其相应 `source` 值的概览。

| 来源                   | 描述                                                                                 | 专用解析器                                                                                             |
| -------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `amazon_product`     | [**商品页面**](/api-targets/cn/dian-zi-shang-wu/amazon/product.md) 适用于你选择的 ASIN。       | 是。                                                                                                |
| `amazon_search`      | [**搜索结果**](/api-targets/cn/dian-zi-shang-wu/amazon/search.md) ，用于您选择的搜索词。          | 是。                                                                                                |
| `amazon_pricing`     | [**优惠列表**](/api-targets/cn/dian-zi-shang-wu/amazon/pricing.md) 适用于你选择的 ASIN。       | 是。                                                                                                |
| `amazon_sellers`     | [**卖家信息**](/api-targets/cn/dian-zi-shang-wu/amazon/sellers.md) 来自你选择的卖家。           | 是。                                                                                                |
| `amazon_bestsellers` | 列表 [**畅销商品**](/api-targets/cn/dian-zi-shang-wu/amazon/best-sellers.md) 在你选择的分类节点中。 | 是                                                                                                 |
| `amazon`             | 提交任意 [**亚马逊 URL**](/api-targets/cn/dian-zi-shang-wu/amazon/url.md) 。               | 仅限特定的 URL [**Amazon 页面类型**](/products/cn/web-scraper-api/features/localization/domain-locale.md). |

## 入门

**创建您的 API 用户凭证**：注册免费试用或在 [**Oxylabs 仪表板**](https://dashboard.oxylabs.io/en/registration) 中购买产品，以创建您的 API 用户凭证（`USERNAME` 和 `PASSWORD`).

{% hint style="warning" %}
如果您的账户需要多个 API 用户，请联系我们的 [**客户支持**](mailto:support@oxylabs.io) 或通过我们 24/7 在线聊天支持发送消息。
{% endhint %}

### 请求样本

{% tabs %}
{% tab title="cURL" %}

```bash
curl 'https://realtime.oxylabs.io/v1/queries' \\
--user "USERNAME:PASSWORD" \
-H "Content-Type: application/json" \
-d '{
        "source": "amazon_product",
        "query": "B07FZ8S74R",
        "geo_location": "90210",
        "parse": true
    }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from pprint import pprint

# 结构化负载。
payload = {
    'source': 'amazon_product',
    'query': 'B07FZ8S74R',
    'geo_location': '90210',
    'parse': True
}

# 获取响应。
response = requests.request(
    'POST',
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# 将格式化后的响应打印到标准输出。
pprint(response.json())
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const https = require("https");

const username = "USERNAME";
const password = "PASSWORD";
const body = {
    source: "amazon_product",
    query: "B07FZ8S74R",
    geo_location: "90210",
    parse: true,
};

const options = {
    hostname: "realtime.oxylabs.io",
    path: "/v1/queries",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        Authorization:
            "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
    },
};

const request = https.request(options, (response) => {
    let data = "";

    response.on("data", (chunk) => {
        data += chunk;
    });

    response.on("end", () => {
        const responseData = JSON.parse(data);
        console.log(JSON.stringify(responseData, null, 2));
    });
});

request.on("error", (error) => {
    console.error("错误：", error);
});

request.write(JSON.stringify(body));
request.end();
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$params = array(
    'source' => 'amazon_product',
    'query' => 'B07FZ8S74R',
    'geo_location' => '90210',
    'parse' => true,
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");

$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo '错误:' . curl_error($ch);
}
curl_close($ch);
?>
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main()
        {
            const string Username = "USERNAME";
            const string Password = "PASSWORD";

            var parameters = new {
                source = "amazon_product",
                query = "B07FZ8S74R",
                geo_location = "90210",
                parse = true
            };

            var client = new HttpClient();

            Uri baseUri = new Uri("https://realtime.oxylabs.io");
            client.BaseAddress = baseUri;

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
            requestMessage.Content = JsonContent.Create(parameters);

            var authenticationString = $"{Username}:{Password}";
            var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(authenticationString));
            requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	const Username = "USERNAME"
	const Password = "PASSWORD"

	payload := map[string]interface{} {
		"source":       "amazon_product",
		"query":        "B07FZ8S74R",
		"geo_location": "90210",
		"parse":        true,
	}

	jsonValue, _ := json.Marshal(payload)

	client := &http.Client{}
	request, _ := http.NewRequest("POST",
		"https://realtime.oxylabs.io/v1/queries",
		bytes.NewBuffer(jsonValue),
	)

	request.SetBasicAuth(Username, Password)
	request.Header.Set("Content-Type", "application/json")
	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}
```

{% endtab %}

{% tab title="HTTP" %}

```http
https://Realtime.oxylabs.io/v1/queries?source=amazon_product&query=B07FZ8S74R&geo_location=90210&parse=true&access_token=12345abcde
```

{% endtab %}

{% tab title="Java" %}

```java
package org.example;

import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;

public class Main implements Runnable {
    private static final String AUTHORIZATION_HEADER = "Authorization";
    public static final String USERNAME = "USERNAME";
    public static final String PASSWORD = "PASSWORD";

    public void run() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("source", "amazon_product");
        jsonObject.put("query", "B07FZ8S74R");
        jsonObject.put("geo_location", "90210");
        jsonObject.put("parse", true);

        Authenticator authenticator = (route, response) -> {
            String credential = Credentials.basic(USERNAME, PASSWORD);
            return response
                    .request()
                    .newBuilder()
                    .header(AUTHORIZATION_HEADER, credential)
                    .build();
        };

        var client = new OkHttpClient.Builder()
                .authenticator(authenticator)
                .readTimeout(180, TimeUnit.SECONDS)
                .build();

        var mediaType = MediaType.parse("application/json; charset=utf-8");
        var body = RequestBody.create(jsonObject.toString(), mediaType);
        var request = new Request.Builder()
                .url("https://realtime.oxylabs.io/v1/queries")
                .post(body)
                .build();

        try (var response = client.newCall(request).execute()) {
            if (response.body() != null) {
                try (var responseBody = response.body()) {
                    System.out.println(responseBody.string());
                }
            }
        } catch (Exception exception) {
            System.out.println("错误： " + exception.getMessage());
        }

        System.exit(0);
    }

    public static void main(String[] args) {
        new Thread(new Main()).start();
    }
}
```

{% endtab %}

{% tab title="JSON" %}

```json
{
    "source": "amazon_product",
    "query": "B07FZ8S74R",
    "geo_location": "90210",
    "parse": true
}
```

{% endtab %}
{% endtabs %}

<details>

<summary>输出示例</summary>

```json
{
    "results": [
        {
            "content": {
                "ads": [
                    {
                        "pos": 1,
                        "asin": "B07KRY43KN",
                        "type": "organic_also_viewed",
                        "price": 29.99,
                        "title": "Echo Glow - 多彩智能灯，兼容 Alexa",
                        "images": [
                            "https://images-na.ssl-images-amazon.com/images/I/61kaGoho9HL._AC_UL160_SR160,160_.jpg"
                        ],
                        "rating": 4.5,
                        "location": "carousel",
                        "price_upper": 29.99,
                        "reviews_count": 48742,
                        "is_prime_eligible": false
                    },
                    {...}
                ],
                "url": "https://www.amazon.com/dp/B07FZ8S74R",
                "asin": "B07FZ8S74R",
                "page": 1,
                "brand": "亚马逊",
                "price": 0,
                "stock": "当前无货。我们不知道此商品何时或是否会重新有货。",
                "title": "Echo Dot（第 3 代，2018 版）- 搭载 Alexa 的智能音箱 - 炭黑色",
                "coupon": "",
                "images": [
                    "https://m.media-amazon.com/images/I/61MZfowYoaL._AC_SL1000_.jpg",
                    "..."
                ],
                "rating": 4.7,
                "category": [],
                "currency": "USD",
                "delivery": [],
                "page_type": "产品",
                "price_sns": 0,
                "variation": [],
                "has_videos": false,
                "sales_rank": [],
                "top_review": "我最近将 Echo Dot（第 3 代，2018 版）加入了我的智能家居设置，对它的性能和功能印象非常深刻。这款紧凑型智能音箱在实用性和便利性方面表现出色。设置过程非常轻松——几分钟内我就让 Alexa 运行起来，随时准备提供帮助。语音识别准确得惊人，Alexa 的回应既迅速又有帮助。无论是查看天气、设置计时器，还是播放我最喜欢的音乐，Echo Dot 都能毫不费力地融入我的日常生活。对于这样一款小巧的设备来说，音质出乎意料地出色。音频的清晰度和层次感令人印象深刻，非常适合播放音乐，甚至可作为更大音响系统的副扬声器。我很喜欢 Echo Dot 简洁而低调的设计，它能无缝融入任何房间的装饰风格。炭黑色也增添了一丝优雅，让它成为我生活空间中赏心悦目的点缀。最突出的功能之一是智能家居控制。Echo Dot 能轻松连接各种智能设备，让我只需简单的语音命令就能控制灯光、恒温器等。它确实提升了我智能家居设置的整体便利性。总之，Echo Dot（第 3 代，2018 版）已被证明是我家中不可或缺的好帮手。其精准的语音识别、出色的音质以及无缝的智能家居集成，使它在智能音箱市场中脱颖而出。如果你正在寻找一款可靠且功能丰富的智能音箱，Echo Dot 是绝佳之选——强烈推荐！\n  \n阅读更多",
                "asin_in_url": "B07FZ8S74R",
                "description": "",
                "parent_asin": "B07H65KP63",
                "price_upper": 0,
                "pricing_str": "",
                "pricing_url": "https://www.amazon.com/gp/offer-listing/B07FZ8S74R?startIndex=0",
                "manufacturer": "亚马逊",
                "price_buybox": -1,
                "product_name": "Echo Dot（第 3 代，2018 版）- 搭载 Alexa 的智能音箱 - 炭黑色",
                "bullet_points": "ECHO DOT 亮相——我们最紧凑的智能音箱，完美适合小空间。\n丰富而响亮的音效——比 Echo Dot 第 2 代拥有更好的音质，带来更丰富、更响亮的声音。可与第二台 Echo Dot 配对，实现立体声。\nALEXA 让你借助 PRIME 做更多——使用 Amazon Music 聆听数百万首歌曲，用语音享受 2 天配送，在 Audible 上收听有声书，以及更多功能。\n让生活更轻松——Alexa 可以设置计时器、查看天气、阅读新闻、调节恒温器、回答问题等，帮助处理日常任务。\n为保护你的隐私而设计——采用多层隐私控制，包括删除录音、关闭麦克风，以及更多应用内隐私控制。\n用简单短语控制音乐——Echo Dot 允许你通过 Amazon Music、Apple Music、Spotify、SiriusXM 等以及蓝牙播放歌曲。使用 Alexa 语音控制，可轻松切换到下一首、调节音量并在无需起身的情况下暂停。\n免提与他人联系——可拨打拥有 Alexa 应用或 Echo 设备的朋友和家人。可即时进入其他房间，或向全屋宣布晚餐已经准备好了。\nALEXA 拥有技能——随着数以万计的技能不断增加，Alexa 正变得越来越智能，并持续添加跟踪健身、玩游戏等新技能。",
                "price_initial": 0,
                "pricing_count": 1,
                "reviews_count": 985157,
                "sns_discounts": [],
                "developer_info": [],
                "price_shipping": 0,
                "featured_merchant": [],
                "is_prime_eligible": false,
                "parse_status_code": 12005,
                "answered_questions_count": 0,
                "rating_stars_distribution": [
                    {
                        "rating": 5,
                        "percentage": 82
                    },
                    {...}
                ]
            },
            "created_at": "2024-07-01 09:05:45",
            "updated_at": "2024-07-01 09:05:55",
            "page": 1,
            "url": "https://www.amazon.com/dp/B07FZ8S74R",
            "job_id": "7213467808577910785",
            "status_code": 200,
            数据字典
        }
    ]
}
```

</details>

我们在示例中使用同步 [**Realtime**](/products/cn/web-scraper-api/integration-methods/realtime.md) 集成方法。如果您想使用 [**Proxy Endpoint**](/products/cn/web-scraper-api/integration-methods/proxy-endpoint.md) 或异步 [**Push-Pull**](/products/cn/web-scraper-api/integration-methods/push-pull.md) 集成，请参阅 [**集成方法**](/products/cn/web-scraper-api/integration-methods.md) 部分。

可选地，您还可以包含其他参数，例如 `geo_location`, `user_agent_type`, `parse`, `render` 以及更多内容，以自定义您的抓取请求。阅读更多：

{% content-ref url="/spaces/ZwEHB9k4MH4pDy80n9mF/pages/1c0708575f299a0b7d4cba7684877a9277872b1e" %}
[功能](/products/cn/web-scraper-api/features.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.oxylabs.io/api-targets/cn/dian-zi-shang-wu/amazon.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
