搜索
使用 Oxylabs 网页爬虫 API 抓取 Amazon 搜索结果。检索商品标题、价格、评分等,并支持 JS 渲染、地理定位和示例。
该 amazon_search source 被设计为检索 Amazon 搜索结果页面。要查看包含检索数据的响应示例,请下载 此 示例输出 HTML 格式的文件或查看结构化数据输出 此处.
请求示例
在下面的代码示例中,我们发出请求以从 amazon.com检索结果,其中包括 2 搜索结果页面,从第 #2 页开始,搜索词为 nirvana tshirt。此外,搜索将被限制为类别 ID: 16391693031 并且价格以 USD 货币显示。
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "amazon_search",
"domain": "com",
"query": "nirvana tshirt",
"start_page": 2,
"pages": 2,
"parse": true,
"context": [
{"key": "category_id", "value": "16391693031"},
{"key": "currency", "value": "USD"},
{"key": "refinements", "value": ["p_123:256097"]},
{"key": "sort_by", "value": "featured"}
]
}'import requests
from pprint import pprint
# 构建负载(payload)。
payload = {
'source': 'amazon_search',
'domain': 'com',
'query': 'nirvana tshirt',
'start_page': 2,
'pages': 2,
'parse': True,
'context': [
{'key': 'category_id', 'value': 16391693031},
{'key': 'currency', 'value': 'USD'},
{"key": "refinements", "value": ["p_123:256097"]},
{"key": "sort_by", "value": "featured"}
],
}
# 获取响应。
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# 将美化后的响应打印到标准输出。
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "amazon_search",
domain: "com",
query: "nirvana tshirt",
start_page: 2,
pages: 2,
parse: true,
sort_by: "featured",
refinements: "p_123:256097",
context: [
{ key: "category_id", value: "16391693031" },
{ key: "currency", value: "USD" },
{"key": "refinements", "value": ["p_123:256097"]},
{"key": "sort_by", "value": "featured"},
],
};
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:", error);
});
request.write(JSON.stringify(body));
request.end();https://realtime.oxylabs.io/v1/queries?source=amazon_search&domain=com&query=nirvana%20tshirt&start_page=2&pages=2&sort_by=featured&refinements[0]=p_123:256097&parse=true&context[0][key]=category_id&context[0][value]=16391693031&context[1][key]=currency&context[1][value]=USD&access_token=12345abcde<?php
$params = array(
'source' => 'amazon_search',
'domain' => 'com',
'query' => 'nirvana tshirt',
'start_page' => 2,
'pages' => 2,
'parse' => true,
'sort_by' => 'featured',
'refinements' => 'p_123:256097',
'context' => [
['key' => 'category_id', 'value' => 16391693031],
['key' => 'currency', 'value' => 'USD'],
['key': 'refinements', 'value': ['p_123:256097']],
['key' => 'sort_by', 'value' => 'featured']
]
);
$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 'Error:' . curl_error($ch);
}
curl_close($ch);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_search",
"domain": "com",
"query": "nirvana tshirt",
"start_page": 2,
"pages": 2,
"parse": true,
"sort_by": "featured",
"refinements":"p_123:256097",
"context": []map[string]interface{}{
{"key": "category_id", "value": 16391693031},
{"key": "currency", "value": "USD"},
{"key": "refinements", "value": []string{"p_123:256097"}},
{"key": "sort_by", "value": "featured"},
},
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
response, _ := client.Do(request)
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}
using System;
using System.Collections.Generic;
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_search",
domain = "com",
query = "nirvana tshirt",
start_page = 2,
pages = 2,
parse = true,
sort_by: "featured",
refinements: "p_123:256097",
context = new dynamic [] {
new { key = "category_id", value = 16391693031 },
new { key = "currency", value = "USD" },
new { key = "refinements", value = new object[] {"p_123:256097"}},
new { key = "sort_by", value = "featured"}
}
};
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.ASCIIEncoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}package org.example;
import okhttp3.*;
import org.json.JSONArray;
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_search");
jsonObject.put("domain", "com");
jsonObject.put("query", "nirvana tshirt");
jsonObject.put("start_page", 2);
jsonObject.put("pages", 2);
jsonObject.put("parse", true);
jsonObject.put("sort_by", "featured");
jsonObject.put("refinements", "p_123:256097");
jsonObject.put("context", new JSONArray()
.put(new JSONObject()
.put("key", "category_id")
.put("value", "16391693031"))
.put(new JSONObject()
.put("key", "currency")
.put("value", "USD"))
.put(new JSONObject()
.put("key", "refinements")
.put("value", new JSONArray()
.put("p_123:256097"))
.put(new JSONObject()
.put("key", "sort_by")
.put("value", "featured"))
);
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("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "amazon_search",
"domain": "com",
"query": "nirvana tshirt",
"start_page": 2,
"pages": 2,
"parse": true,
"sort_by": "featured",
"refinements": "p_123:256097",
"context": [
{"key": "category_id", "value": "16391693031"},
{"key": "currency", "value": "USD"},
{"key": "refinements", "value": ["p_123:256097"]},
{"key": "sort_by", "value": "featured"}
]
}在我们的示例中,我们使用同步的 Realtime 集成方法。如果您想使用 Proxy Endpoint 或异步的 Push-Pull 集成,请参阅 集成方法 部分。
请求参数值
通用
用于抓取 Amazon 搜索结果的基本设置和自定义选项。
- 必填参数
本地化
将结果适配到特定地理位置、域名、语言。
重要说明: 在大多数页面类型上,Amazon 会根据客户的收货地址定制返回结果。因此,我们建议使用 geo_location 参数来设置您偏好的收货位置。您可以阅读更多关于在 Amazon 上使用 geo_location 的内容 此处.
分页
用于管理分页和检索搜索结果的控制项。
start_page
起始页码。
1
pages
要检索的页数。
1
排序与过滤
用于控制搜索结果页面的排序和过滤。
排序依据
根据 Amazon 中可能的值之一设置搜索结果页面的排序类型:
"most_recent", "price_low_to_high", "price_high_to_low", "featured", "average_review", "bestsellers".
-
refinements
一个 列表 Amazon 搜索细化参数的集合,用于对搜索结果应用特定筛选。这些参数对应于 Amazon 的动态过滤选项(例如品牌、价格区间、特性),并遵循 Amazon 的内部参数格式,例如 p_123:256097 或 p_n_feature_twenty-eight_browse-bin:98209020031.
由于过滤选项因类别而异并由 Amazon 动态生成,推荐的工作流程是:
首先,使用
parse: true抓取目标 Amazon 搜索页面以发现可用的细化选项从解析后的响应中提取所需的筛选参数
在后续请求中通过
refinements字段使用这些参数以应用特定筛选
-
context:
category_id
在特定的 Amazon 节点(产品类别)中搜索商品。
-
context:
merchant_id
搜索由特定卖家销售的商品。
-
结构化数据
输出数据字典
API 返回包含从 Amazon 检索到的搜索结果的 HTML 或 JSON 对象。
HTML 示例

JSON 结构
所有搜索结果都包含在 results JSON 数组中。每个搜索结果包含以下组合的内容: paid, organic, suggested, amazons_choices,instant_recommendations 列表。此外,可能存在变体,它们被捕获在 variations 键中,提供有关不同类型或类别产品的详细信息,例如不同型号、版本或变体。
url
Amazon 搜索页面的 URL。
字符串
page
当前页码。
整数
pages
页面总数。
整数
query
使用的搜索查询。
字符串
results
包含搜索结果的字典。
对象
results.paid
包含各自详细信息的赞助产品列表。
数组
results.organic
包含各自详细信息的自然排名(非赞助)产品列表。
数组
results.suggested
包含各自详细信息的建议产品列表。
数组
results.amazons_choices
包含各自详细信息的 Amazon's Choice 产品列表。
数组
refinements
此搜索页面上可用的筛选条件列表。
数组
total_results_count
针对搜索查询找到的结果总数。
整数
created_at
抓取任务创建的时间戳。
字符串
updated_at
抓取任务完成的时间戳。
字符串
job_id
与抓取任务关联的作业 ID。
字符串
parser_type
用于解析数据的解析器类型。
字符串
付费
该 paid 搜索结果的该部分指在 Amazon 搜索结果中内联显示的广告内容。

...
"paid": [
{
"pos": 1,
"url": "/sspa/click?ie=UTF8&spc=MTo3ODk3NzcxNTI0MDAzNjk1OjE3MDEwODYyODI6c3BfYXRmOjMwMDA5Mjg4ODc1NTcwMjo6MDo6&url=/IOGEAR-KeyMander-Controller-Crossover-GE1337P2/dp/B08541QCKJ/ref=sr_1_1_sspa?keywords=nintendo&qid=1701086282&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1",
"asin": "B08541QCKJ",
"price": 69.99,
"title": "IOGEAR KeyMander 2 Keyboard/Mouse Adapter Plus Controller Crossover, PS4, PS5, Xbox Series X/S, Xbox One, Nintendo Switch, GE1337P2, FPS, mouse control",
"rating": 3.7,
"currency": "USD",
"is_prime": true,
"url_image": "https://m.media-amazon.com/images/I/41-AZ8CCl1L._AC_UY218_.jpg",
"best_seller": false,
"price_upper": 69.99,
"is_sponsored": true,
"manufacturer": "",
"pricing_count": 1,
"reviews_count": 1229,
"is_amazons_choice": false,
"price_strikethrough": 99.95,
"shipping_information": "FREE delivery Sun, Dec 3 Or fastest delivery Thu, Nov 30"
},
...
]url
商品的 URL。
字符串
asin
Amazon 标准识别号。
字符串
价格
产品的价格。
float
title
产品标题。
字符串
rating
产品的评分。
float
rel_pos
产品在搜索结果中的相对位置。
(要么 pos 或 rel_pos 存在)
整数
pos
表示列表中位置的唯一指示器。(要么 pos 或 rel_pos 存在)
整数
货币
价格所使用的货币。
字符串
url_image
商品图片的 URL。
字符串
best_seller
指示该产品是否为畅销产品。
boolean
price_upper
如果适用,价格的上限。
float
is_sponsored
指示该产品是否为赞助产品。
boolean
manufacturer
产品的制造商名称。
字符串
pricing_count
该产品的报价数量。
整数
reviews_count
该产品的评论数量。
整数
coupon_discount
折扣金额。
integer (optional)
coupon_discount_type
折扣类型: nominal 或 percentage.
string (optional)
is_amazons_choice
指示该产品是否标记为“Amazon's choice”。
boolean
no_price_reason
当价格等于 0.0 时,指示价格缺失的原因
string (optional)
sales_volume
某个产品的销售量或已售出单位数。
string (optional)
is_prime
指示该产品是否有资格参与 Amazon Prime。
boolean
shipping_information
有关产品运输详情的信息。
字符串
自然
该 organic 搜索结果的该部分指基于 Amazon 的搜索算法自然出现的非赞助内容。

...
"organic": [
...
{
"pos": 5,
"url": "/Purifiers-2200sq-ft-MOOKA-purifier-PR1/dp/B0DCBC8KKV/ref=sr_1_5?dib=eyJ2IjoiMSJ9.Qoe5cUAPMM1voliSq4zLfiJ0JVl_hsy805T9yDeoZdvRcrqICV-PjwCg0I67jvJVJ_PSunMweX8SvSH3-M-pI2-ugdCQ85ZkACZeyo0mFA_x-tDj-q1JTf8V3SdCA7KJlxMyHDeIT2N6NHGk7cyVsOpK-UlfWiNJ-dnu6KUIZcC82Zm0ugL-vdGTf8Qj-uDJJcWp35jlmA3m6N3XV3l8BuJVNVIXrsniboQa_FpLjLY.o9cWjzsvdrHpX_CV82v3VY104qfYcK7CkfXDFYuwlC8&dib_tag=se&keywords=air+purifier&qid=1753104496&sr=8-5",
"asin": "B0DCBC8KKV",
"price": 99.99,
"title": "Air Purifiers for Home Large Room up to 2200sq.ft, MOOKA Air purifier for Home Pets with Washable Filter, PM 2.5 Display Air Quality Sensor Air Cleaner for Bedroom, Dorm room, Pets, Office, PR1",
"rating": 4.6,
"currency": "USD",
"is_prime": false,
"url_image": "https://m.media-amazon.com/images/I/81spn7Ork+L._AC_UY218_.jpg",
"best_seller": false,
"price_upper": 99.99,
"is_sponsored": false,
"manufacturer": "",
"sales_volume": "10K+ bought in past month",
"pricing_count": 1,
"reviews_count": 1431,
"coupon_discount": 15,
"is_amazons_choice": false,
"price_strikethrough": 105.97,
"coupon_discount_type": "nominal",
"shipping_information": "FREE delivery Sat, Jul 26Or fastest delivery Wed, Jul 23"
},
...
]pos
表示列表中位置的唯一指示器。
整数
url
商品的 URL。
字符串
asin
Amazon 标准识别号。
字符串
价格
产品的价格。
float
title
产品标题。
字符串
rating
产品的评分。
float
货币
价格所使用的货币。
字符串
is_prime
指示该产品是否有资格参与 Amazon Prime。
boolean
url_image
商品图片的 URL。
字符串
best_seller
指示该产品是否为畅销产品。
boolean
price_upper
如果适用,价格的上限。
float
is_sponsored
指示该产品是否为赞助产品。
boolean
manufacturer
产品的制造商名称。
字符串
sales_volume
某个产品的销售量或已售出单位数。
string (optional)
pricing_count
该产品的定价数量。
整数
reviews_count
该产品的评论数量。
整数
coupon_discount
折扣金额。
integer (optional)
coupon_discount_type
折扣类型: nominal 或 percentage.
string (optional)
is_amazons_choice
指示该产品是否为 Amazon's choice。
boolean
price_strikethrough
任何折扣前的原始价格。
float
shipping_information
交付日期和运费详情。
字符串
no_price_reason
当价格等于 0.0 时,指示价格缺失的原因
string (optional)
variations
产品的不同版本或型号列表
数组
Suggested
该 suggested 搜索结果中的 Suggested 部分通常包含平台基于用户搜索查询、浏览历史或购买行为推荐的产品列表。

...
"suggested": [
{
"pos": 3,
"asin": "B07L4ZRJ7P",
"best_seller": false,
"is_sponsored": false,
"is_amazons_choice": false,
"manufacturer": "",
"pricing_count": 1,
"rating": 4.0,
"reviews_count": 1,
"title": "The Supercar Story",
"url": "/Supercar-Story-Patrick-Mark/dp/B07L4ZRJ7P/ref=sr_1_fkmr0_1?keywords=details about mercedes benz head unit e-class w213 comand navi gps unit a21390050813&qid=1636460216&sr=8-1-fkmr0",
"url_image": "https://m.media-amazon.com/images/I/81uC-IclZqL._AC_UY218_.jpg",
"is_prime": false,
"price": 0.0,
"price_upper": 0.0,
"no_price_reason": "unknown",
"pos": 1,
"currency": "USD",
"suggested_query": "details benz head"
},
...
]url
商品的 URL。
字符串
asin
Amazon 标准识别号。
字符串
价格
产品的价格。
float
title
产品标题。
字符串
rating
产品的评分。
float
货币
价格所使用的货币。
字符串
url_image
商品图片的 URL。
字符串
best_seller
指示该产品是否为畅销产品。
boolean
price_upper
如果适用,价格的上限。
float
is_sponsored
指示该产品是否为赞助产品。
boolean
manufacturer
产品的制造商名称。
字符串
pricing_count
该产品的定价数量。
整数
reviews_count
该产品的评论数量。
整数
coupon_discount
折扣金额。
integer (optional)
coupon_discount_type
折扣类型: nominal 或 percentage.
string (optional)
is_amazons_choice
指示该产品是否为 Amazon's choice。
boolean
pos
表示列表中位置的唯一指示器。
整数
is_prime
指示该产品是否有资格参与 Amazon Prime。
boolean
shipping_information
有关产品运输详情的信息。
字符串
sales_volume
某个产品的销售量或已售出单位数。
string (optional)
no_price_reason
当价格等于 0.0 时,指示价格缺失的原因
string (optional)
suggested_query
Amazon 在搜索结果中提供的建议查询。
字符串
Amazon's Choices
该 amazons_choices 该部分包含带有“Amazon's Choice”徽章并被平台推荐为具有良好质量和性价比的产品。

...
"amazons_choices": [
{
"asin": "B07STGGQ18",
"best_seller": false,
"is_sponsored": false,
"is_amazons_choice": true,
"manufacturer": "",
"pricing_count": 1,
"rating": 4.8,
"reviews_count": 9,
"title": "AMD Ryzen 5 3600 4, 2GHz AM4 35MB Cache Wraith Stealth",
"url": "/AMD-Ryzen-3600-Wraith-Stealth/dp/B07STGGQ18/ref=sr_1_3?dchild=1&keywords=0730143309936&qid=1600153905&sr=8-3",
"url_image": "https://m.media-amazon.com/images/I/71WPGXQLcLL._AC_UY218_.jpg",
"is_prime": true,
"price": 179.0,
"price_upper": 179.0,
"shipping_information": "Lieferung bis Freitag, 18. September GRATIS Versand durch Amazon",
"pos": 3,
"currency": "EUR"
},
...
]url
商品的 URL。
字符串
asin
Amazon 标准识别号。
字符串
价格
产品的价格。
float
title
产品标题。
字符串
rating
产品的评分。
float
货币
价格所使用的货币。
字符串
url_image
商品图片的 URL。
字符串
best_seller
指示该产品是否为畅销产品。
boolean
price_upper
如果适用,价格的上限。
float
is_sponsored
指示该产品是否为赞助产品。
boolean
manufacturer
产品的制造商名称。
字符串
pricing_count
该产品的定价数量。
整数
reviews_count
该产品的评论数量。
整数
coupon_discount
折扣金额。
integer (optional)
coupon_discount_type
折扣类型: nominal 或 percentage.
string (optional)
is_amazons_choice
指示该产品是否为 Amazon's choice。
boolean
pos
表示列表中位置的唯一指示器。
整数
is_prime
指示该产品是否有资格参与 Amazon Prime。
boolean
shipping_information
有关产品运输详情的信息。
字符串
sales_volume
某个产品的销售量或已售出单位数。
string (optional)
no_price_reason
当价格等于 0.0 时,指示价格缺失的原因
string (optional)
variations
产品的不同版本或型号列表
数组
Variations
该 variations 该部分列出产品的不同版本或型号,提供指定类别中可用选项的详细概述。

...
"variations": [
{
"asin": "B08KXB6SZH",
"title": "PlayStation 5",
"price": 29.99,
"not_available": false
},
{
"asin": "B08L6FZM6D",
"title": "PlayStation 4",
"not_available": false,
"no_price_reason": "unknown"
},
{
"asin": "B08N766Q9W",
"title": "Xbox Digial Code",
"not_available": true,
"no_price_reason": "Currently unavailable."
}
],
...asin
Amazon 标准识别号
字符串
title
变体的标题
字符串
价格
变体的价格
float
price_strikethrough
折扣或促销前的原始价格。
float
not_available
指示该变体当前是否不可用
boolean
最后更新于
这有帮助吗?

