Olostep 提供了一个网页抓取 API,能够以可扩展且经济高效的方式,在电商平台上实时追踪数百万产品的价格,并定期更新(例如每隔几小时)。
这对于希望监控价格波动、比较多个网站价格或追踪竞争对手定价策略的企业非常有用。
在本指南中,我们将了解某客户如何使用 Olostep 每天为数百万亚马逊产品设置自动价格追踪。
为什么选择 Olostep 进行价格追踪?
- 可扩展性: 每隔几小时追踪数百万产品的价格。
- 自动化: 设置在预定时间/定期运行的抓取任务。
- 多种格式: 以 JSON、html 或 markdown 格式检索数据。
- 自定义解析器: 使用我们的解析器提取相关的 JSON 信息,或将您自己的解析器传递给 API。
如何使用 Olostep 进行价格追踪
过程设置概述
在大规模追踪产品时,我们建议使用 Olostep 的 Batches 端点。
此端点允许您发送多个 URL 批次(每批最多 10,000 个)以并行处理,并在 5-8 分钟后检索结果。您可以同时发送多个批次,监控其进度,并在完成后检索结果。通过这种方式,您可以在 15-20 分钟内处理数百万个 URL。
使用 Olostep 进行价格追踪的整体流程如下:
- 从数据库读取产品,并将要追踪的 URL 保存到 CSV 文件中。
- 从 CSV 文件中读取数据,并使用 Olostep 的批次端点启动一个批次。 通过将数据以最多 10,000 个 URL 为一组发送到端点来完成。
- 每 60 秒检查一次批次状态以监控进度。
- 批次完成后,读取内容并在您的工作流程中使用。
您可以启动一个批次并返回页面的 html/markdown 内容,然后自行解析以提取所需数据。但我们建议使用解析器启动批次,以便返回一个仅包含所需解析数据的 JSON 对象。
您可以将自己的解析器传递给 API,或使用我们为一些常见网站(如亚马逊产品页面、谷歌搜索结果、LinkedIn 个人资料等)预建的解析器之一。
我们为每个批次的数据存储 7 天,因此如果需要,您可以多次检索。
步骤 1:从数据库导出产品数据
第一步是从您的数据库中检索产品信息,并以 CSV 格式保存。该文件应包含产品标识符、URL 以及任何跟踪所需的附加元数据。
步骤 2:使用 Olostep 启动一个批次
要启动一个批次,从 CSV 中读取产品数据并将其发送到 Olostep 批次端点。这是通过使用 JSON 负载的 HTTP POST 请求完成的。
每个批次最多可以包含 10,000 个 URL。对于大数据集(>10,000 个 URL),请分成多个批次并并行发送。
一个批次由一个项目数组组成,其中每个项目代表一个要处理的产品 URL。以下是批次请求的结构
import requests
def start_batch(batch_array):
payload = {
"batch_array": batch_array, # 要处理的项目数组
"batch_country": "IT", # 批次的国家代码
"parser": "@olostep/amazon-it-product" # 可选:指定自定义解析器,以便仅获取所需的 JSON 数据
}
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
response = requests.post(
"https://api.olostep.com/v1/batches",
headers=headers,
json=payload
)
return response.json()["id"]
批次数组结构
批次数组中的每个项目应遵循以下结构:
{
"custom_id": "unique_identifier", // 必需:项目的唯一标识符
"url": "product_url", // 必需:要处理的 URL
"wait_before_scraping": 0, // 可选:抓取每个批次中 URL 之前的等待时间(以毫秒为单位)
}
参数
要处理的项目数组。每批最多 10,000 个 URL。每个项目必须有一个唯一的 custom_id。
要使用的自定义解析器的名称(例如,“@olostep/amazon-it-product”)。请通过 info@olostep.com 联系我们以获取预建解析器的访问权限或创建您自己的解析器。
响应
{
"id": "batch_54ikwskmt8"
}
端点返回一个包含 batch_id 的 JSON 对象,可用于监控状态然后检索结果。
使用示例
# 准备批次数组
batch_array = [
{
"custom_id": "product_123",
"url": "https://www.amazon.it/dp/B0CHF6Z393/?coliid=INQXTGFQF4FM4&colid=1R0NGA5NR5LSZ&psc=1&ref_=list_c_wl_lv_vv_lig_dp_it"
},
{
"custom_id": "product_124",
"url": "https://www.amazon.it/dp/B0CHMJL774/?coliid=I6CFYA5EHVHE2&colid=1R0NGA5NR5LSZ&psc=1&ref_=list_c_wl_lv_vv_lig_dp_it"
}
]
# 开始批次处理
batch_id = start_batch(batch_array)
print(f"Started batch: {batch_id}")
步骤 3:监控批次状态
一旦批次启动,您需要监控其状态以确定何时处理完成。API 提供了一个状态端点,可以定期(例如每 60 秒)使用 batch_id 轮询
import requests
def check_batch_status(batch_id):
headers = {"Authorization": "Bearer " + API_KEY}
response = requests.request(
"GET",
f"https://api.olostep.com/v1/batches/{batch_id}",
headers=headers
)
return response.json()["status"]
对于生产使用,建议实现异步监控以有效处理多个批次:
import asyncio
async def monitor_batch(batch_id: str) -> None:
"""监控单个批次直到完成"""
while True:
status = check_batch_status(batch_id)
if status == "completed":
print(f"Batch {batch_id} completed!")
return
print(f"Batch {batch_id} still processing... Checking again in 60 seconds")
await asyncio.sleep(60)
步骤 4:检索已完成项目的 ID
一旦批次标记为完成,您可以获取已完成项目的列表。每个项目将有一个 retrieve_id。如果您想要实际内容,请通过传递 retrieve_id 使用检索端点
import requests
def get_completed_items(batch_id):
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(f"https://api.olostep.com/v1/batches/{batch_id}/items", headers=headers)
return response.json()["items"]
这将返回已完成的项目,每个 URL 都有一个 retrieve_id。然后,您可以使用检索端点检索并存储每个 URL 的提取数据(html、markdown 或 JSON)。
您可以使用以下代码获取批次中每个项目的 retrieve_id:
items = get_completed_items("your_batch_id")
for item in items:
print(f"""
URL: {item['url']}
Custom ID: {item['custom_id']}
Retrieve ID: {item['retrieve_id']}
---
""")
步骤 5:检索每个项目的内容
一旦您拥有每个项目的 retrieve_id,您可以使用检索端点获取其内容(HTML、Markdown 或 JSON):
def retrieve_content(retrieve_id):
url = "https://api.olostep.com/v1/retrieve"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"retrieve_id": retrieve_id}
response = requests.get(
url,
headers=headers,
params=params
)
return response.json()
# 使用示例
retrieve_id = "product_123"
content = retrieve_content(retrieve_id)
# 如果您想处理多个项目
def process_batch_content(batch_id):
items = get_completed_items(batch_id)
for item in items:
content = retrieve_content(item['retrieve_id'])
# 根据需要处理或存储内容
通过遵循这些步骤,您可以使用 Olostep 设置一个自动化的价格追踪系统。我们很快将在 GitHub 上发布一个开源仓库,其中包含此示例的完整代码。