搜索
了解如何使用 Web Scraper API 获取 Walmart 搜索结果。了解请求参数和结构化数据输出。
该 walmart_search 此源旨在检索沃尔玛的搜索结果页面。我们可以返回任意沃尔玛页面的 HTML。此外,我们还可以提供 沃尔玛搜索页面的结构化(解析)输出.
请求示例
下面的示例说明如何获取解析后的沃尔玛搜索页面结果。
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "walmart_search",
"query": "iphone",
"parse": true
}'import requests
from pprint import pprint
# 构建负载(payload)。
payload = {
'source': 'walmart_search',
'query': 'iphone',
'parse': True,
}
# 获取响应。
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# 与返回作业状态和结果 URL 的响应不同,此调用将直接返回
# 带结果的 JSON 响应。
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "walmart_search",
query: "iphone",
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:", error);
});
request.write(JSON.stringify(body));
request.end();# 您提交的整个字符串必须进行 URL 编码。
https://realtime.oxylabs.io/v1/queries?source=walmart_search&query=iphone&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'walmart_search',
'query' => 'iphone',
'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 '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": "walmart_search",
"query": "iphone",
"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)
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 = "walmart_search",
query = "iphone",
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.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.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", "walmart_search");
jsonObject.put("query", "iphone");
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("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "walmart_search",
"query": "iphone",
"parse": true
}在我们的示例中,我们使用同步的 Realtime 集成方法。如果您想使用 Proxy Endpoint 或异步的 Push-Pull 集成,请参阅 集成方法 部分。
请求参数值
通用
source
设置抓取器。
walmart_search
query
要搜索的关键词或短语(用于查找产品)。
-
min_price
设置最低价格。
-
max_price
设置最高价格。
-
排序依据
选择产品的排序方式。可用值为: price_low, price_high, best_seller, best_match.
best_match
parse
当设置为以下值时返回解析后的数据 true.
false
- 必填参数
本地化
将结果适配到特定门店、配送地点等。在此处可找到沃尔玛门店 ID 的 JSON 格式列表:
您也可以找到沃尔玛门店的官方页面 此处.
domain
沃尔玛的域名本地化。
字符串
fulfillment_speed
设置履约速度。可用值为: 今天, 2_days, anytime, tomorrow.
字符串
fulfillment_type
设置履约类型。可用值为: in_store.
字符串
delivery_zip
设置收货邮编位置。
字符串
store_id
设置门店位置。
字符串
结构化数据
输出数据字典
HTML 示例
JSON 结构
下表列出我们解析的每个搜索页面元素的详细清单,以及其描述和数据类型。表中还包含一些元数据。
url
搜索页面的 URL。
字符串
facets
一个数组,包含显示在搜索结果页上的任何可用搜索面板(筛选项)的详细信息。
数组
results
搜索页面结果。
数组
results.general
包含一般产品详细信息的对象。
对象
results.price
包含产品定价详细信息的对象。
对象
results.rating
对象包含有关产品评分的详细信息。
对象
results.seller
对象包含卖家信息。
对象
results.variants (可选)
数组包含产品变体的列表。
数组
results.fulfillment
对象包含有关产品履约选项的详细信息。
对象
位置
提供请求运行时位置信息。
对象
page_details
对象包含搜索查询结果页面的数据。
对象
created_at
抓取任务创建的时间戳。
时间戳
updated_at
抓取任务完成的时间戳。
时间戳
page
提取数据时所在的页码
整数
url
搜索页面的 URL。
字符串
job_id
与抓取任务关联的作业 ID。
字符串
is_render_forced
标识此请求是否已强制渲染。
boolean
parser_type
用于提取数据的解析器类型(例如,"walmart_search_new")。
字符串
常规

...
"general": {
"pos": 1,
"url": "/ip/Adidas-Men-s-California-2-0-Crew-Neck-Short-Sleeve-Tee-T-Shirt/833623567?classType=VARIANT",
"image": "https://i5.walmartimages.com/seo/Adidas-Men-s-California-2-0-Crew-Neck-Short-Sleeve-Tee-T-Shirt_1b8e0b00-fdc7-4b88-99fb-9a633bf0227b_1.812a96a559770448397cd828ef1cf68b.jpeg?odnHeight=180&odnWidth=180&odnBg=FFFFFF",
"title": "Adidas Men's California 2.0 Crew Neck Short Sleeve Tee T-Shirt",
"sponsored": true,
"product_id": "833623567",
"out_of_stock": false,
"section_title": "Results for \"adidas\""
},
...pos
指示给定项在其所属分区内的位置。
整数
url
商品的 URL。
字符串
image
主产品图片的 URL。
字符串
title
产品的标题或名称。
字符串
product_id
产品的 ID。
字符串
sponsored
标识产品是否为赞助商品。
boolean
badge (可选)
交易、热门推荐、畅销、昨日以来售出 100+ 件等标识。
字符串列表
section_title
产品在搜索页面中所属分区的名称。
字符串
out_of_stock
指示商品是否缺货。
boolean
价格

...
"price": {
"price": 1149.99,
"currency": "USD",
"price_min": 1149.99
"price_max": 1399.00
},
...价格
产品当前价格(未扣减)。
float
price_strikethrough(可选)
划线价可以是曾经价格、组合价或标价。
float
货币
货币的 ISO 4217 三字代码。
字符串
price_min(可选)
在区间定价情况下的最低价格。
float
price_max(可选)
在区间定价情况下的最高价格。
float
评分

...
"rating": {
"count": 428,
"rating": 4.6
},
...rating
产品的平均评分。
float
count
产品的评分数量。
整数
卖家
数据未在视觉上显示。
name
卖家的名称。
字符串
id
卖家的 ID。
字符串
变体

...
"variants": [
{
"url": "/ip/Apple-MacBook-Air-13-3-inch-Laptop-Gold-M1-Chip-8GB-RAM-256GB-storage/550880792?classType=undefined&variantFieldId=actual_color",
"image": "https://i5.walmartimages.com/asr/a9857413-b9fa-4c8d-9f81-7ea4c93889a1.410fd3cb7fe36102bbe2d3dca32a8075.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff",
"title": "Gold",
"product_id": "550880792"
},
{
"url": "/ip/Apple-MacBook-Air-13-3-inch-Laptop-Silver-M1-Chip-8GB-RAM-256GB-storage/715596133?classType=undefined&variantFieldId=actual_color",
"image": "https://i5.walmartimages.com/asr/056c08d5-2d68-44f2-beb0-dd8a47e2f8e8.2a2a210657937c3c11b37df5be8fa4ad.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff",
"title": "Silver",
"product_id": "715596133"
},
{
"url": "/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889?classType=undefined&variantFieldId=actual_color",
"image": "https://i5.walmartimages.com/asr/af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg?odnHeight=180&odnWidth=180&odnBg=ffffff",
"title": "Space Gray",
"product_id": "609040889"
}
],
...url
产品变体的 URL。
字符串
title
产品变体的标题。
字符串
product_id
产品变体的 ID。
字符串
image
产品变体的图片。
字符串
履约

...
"fulfillment": {
"pickup": true,
"delivery": true,
"shipping": true,
"free_shipping": false
}
...pickup
指示产品是否可通过门店自提履约。
boolean
delivery
指示产品是否可通过门店配送履约。
若可用,配送来自您当地的门店。
boolean
运输
指示产品是否可通过家庭运输履约。
boolean
free_shipping
指示运费是否为免费。
boolean
面板(Facets)
...
"facets": [
{
"type": "sort",
"values": [
{
"name": "Best Match"
},
{
"name": "Price Low"
},
{
"name": "Price High"
},
{
"name": "Best Seller"
}
],
"display_name": "Sort by"
},
...display_name
面板的显示名称(即面向用户的名称)。
字符串
type
面板的类型。
字符串
values
面板值数组显示给定面板的取值。
数组
values.name
面板值的名称。
字符串
values.item_count (可选)
特定面板下可用商品的数量。
整数
位置

...
"location": {
"city": "Sacramento",
"state": "CA",
"store_id": "8915",
"zip_code": "95829"
},
...city
请求运行时所在的城市。
字符串
state
请求运行时所在的州。
字符串
zip_code
请求运行时使用的邮政编码。
字符串
store_id
请求运行时使用的门店 ID。
字符串
页面详情
...
"page_details": {
"page": 1,
"total_results": 11524,
"last_visible_page": 25
},
...total_results
显示为可用的搜索结果总数。
整数
last_visible_page
搜索结果的最后一页页码。
整数
page
提取产品数据时所在的页码
整数
最后更新于
这有帮助吗?

