商品
了解如何开始抓取 Etsy 商品结果页面。
该 etsy_product source 旨在检索 Etsy 产品结果页面。我们可以返回您所需的任何 Etsy 页面 HTML。此外,我们可以提供 针对 Etsy 产品页面的结构化(已解析)输出.
请求示例
下面的示例说明了如何获取已解析的 Best Buy 产品结果。
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "etsy_product",
"product_id": "1858266469",
"parse": true
}'import requests
from pprint import pprint
# 构建负载(payload)。
payload = {
'source': 'etsy_product',
'product_id': '1858266469',
'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: "etsy_product",
product_id: "1858266469",
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=etsy_product&product_id=18582664691&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'etsy_product',
'product_id' => '1858266469',
'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": "etsy_product",
"product_id": "1858266469",
"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 = "etsy_product",
product_id = "1858266469",
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", "etsy_product");
jsonObject.put("product_id", "1858266469");
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": "etsy_product",
"product_id": "1858266469",
"parse": true
}在我们的示例中,我们使用同步的 Realtime 集成方法。如果您想使用 Proxy Endpoint 或异步的 Push-Pull 集成,请参阅 集成方法 部分。
请求参数值
通用
- 必填参数
结构化数据
etsy_product source 可以以 HTML 或 JSON 格式提取 Etsy 产品结果,提供页面各元素的结构化数据。
输出示例
{
"results": [
{
"content": {
"url": "https://www.etsy.com/listing/1518307138/personalized-travel-jewelry-box-small",
"price": 6.98,
"title": "个性化旅行珠宝盒,小方形耳环收纳盒,伴娘礼物盒送给姐妹、朋友",
"images": [
"https://i.etsystatic.com/41680084/r/il/f09928/5191407963/il_75x75.5191407963_rurr.jpg",
"https://i.etsystatic.com/41680084/r/il/c9a00d/5191407709/il_75x75.5191407709_nqq5.jpg",
"https://i.etsystatic.com/41680084/r/il/52b188/5179396963/il_75x75.5179396963_pzw9.jpg",
"https://i.etsystatic.com/41680084/r/il/ce5219/5191407739/il_75x75.5191407739_k1s6.jpg",
"https://i.etsystatic.com/41680084/r/il/23c7e1/5143187268/il_75x75.5143187268_2tsi.jpg",
"https://i.etsystatic.com/41680084/r/il/96f059/5143187294/il_75x75.5143187294_1swc.jpg"
],
"seller": {
"url": "https://www.etsy.com/shop/EnchVows?ref=shop-header-name&listing_id=1518307138&from_page=listing",
"title": "EnchVows",
"rating": 4.8247,
"best_seller": false,
"star_seller": true,
"reviews_count": 3016
},
"reviews": {
"count": 1875
},
"currency": "USD",
"shipping": {
"from": "United States"
},
"old_price": 19.95,
"categories": [
{
"title": "All categories"
},
{
"title": "Jewelry"
},
{
"title": "Jewelry Storage"
},
{
"title": "Jewelry Boxes"
}
],
"customized": false,
"product_id": "1518307138",
"variation_count": 36,
"parse_status_code": 12000
},
"created_at": "2024-06-13 11:59:06",
"updated_at": "2024-06-13 11:59:13",
"page": 1,
"url": "https://www.etsy.com/de-en/listing/1518307138/personalized-travel-jewelry-box-small?click_key=d602fe08540deffc77a9e2c6ab6cee6d2c2ca74a:1518307138&click_sum=a7bd4b3c&ref=hp_prn-2&pro=1&sts=1",
"job_id": "7206988452519233537",
"status_code": 200,
"parser_type": "etsy_product"
}
]
}输出数据字典
HTML 示例

JSON 结构
下表列出了我们解析的每个产品页面元素的详细清单、说明和数据类型。表中还包括一些元数据。
url
Etsy 产品页面的 URL。
字符串
价格
产品的价格。
float
title
产品标题。
字符串
images
产品图片 URL 的数组。
数组
卖家
卖家对象,包含卖家详细信息。
对象
评价
评价对象,包含评价详细信息。
对象
reviews.count
该产品收到的评价数量。
整数
货币
价格所使用的货币。
字符串
运输
运输对象,包含运输详细信息。
对象
shipping.from
发货起始国家。
字符串
旧价格
产品折扣前的原价。
整数
分类
产品所属的分类对象数组。
数组
categories.title
分类的标题。
字符串
可定制
指示产品是否可以定制。
boolean
product_id
产品的唯一标识符。
字符串
variation_count
产品可用变体的数量。
整数
created_at
抓取任务创建的时间戳。
时间戳
updated_at
抓取任务完成的时间戳。
时间戳
page
结果翻页中的页码。
整数
parser_type
用于提取数据的解析器类型。
整数
job_id
与抓取任务关联的作业 ID。
字符串
卖家
卖家对象,包含卖家详情。
...
"seller": {
"url": "https://www.etsy.com/shop/EnchVows?ref=shop-header-name&listing_id=1518307138&from_page=listing",
"title": "EnchVows",
"rating": 4.8247,
"best_seller": false,
"star_seller": true,
"reviews_count": 3016
},
...url
卖家页面的 URL。
字符串
title
卖家名称。
字符串
rating
卖家的评分分数。
整数
best_seller
指示卖家是否为畅销者。
boolean
star_seller
指示卖家是否为明星卖家。
boolean
reviews_count
(可选)
卖家的评价数量。
整数
最后更新于
这有帮助吗?

