Бот-парсер товарів з маркетплейсів
Парсинг маркетплейсів (Ozon, Wildberries, Amazon) — інший клас завдань порівняно з парсингом звичайних сайтів поставщиків. Ozon та Wildberries активно протидіють скрапингу: захист Cloudflare, динамічний JS, browser fingerprinting, rate limiting. Для кожного маркетплейсу — окрема стратегія.
Законні API проти парсингу
Перед парсингом варто перевірити офіційні можливості:
| Маркетплейс | Офіційний API | Обмеження |
|---|---|---|
| Ozon | Seller API (для продавців) | Тільки свої товари |
| Wildberries | Seller API, Statistics API | Тільки свої дані |
| Amazon | Product Advertising API | Потрібне партнерство |
Парсинг чужих товарів маркетплейсів — у сірій зоні. Використовується для конкурентного аналізу, моніторингу цен, дослідження ринку.
Wildberries: парсинг через JSON API
# scraper/wildberries.py
import httpx
import asyncio
class WildberriesScraper:
CARD_URL = "https://card.wb.ru/cards/v2/detail"
async def get_product(self, nm_id: int):
params = {"appType": 1, "curr": "rub", "nm": nm_id}
resp = await self.client.get(self.CARD_URL, params=params)
data = resp.json()
return self._normalize(data.get("data", {}).get("products", [])[0])
async def search_products(self, query: str):
params = {"appType": 1, "query": query}
resp = await self.client.get(self.SEARCH_URL, params=params)
products = resp.json().get("data", {}).get("products", [])
return [self._normalize(p) for p in products]
Ozon: Playwright для SPA
# scraper/ozon.py
from playwright.async_api import async_playwright
class OzonScraper:
async def scrape_product(self, url: str):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
product_data = {}
async def handle_response(response):
if "/api/entrypoint-api.bx/page/json" in response.url:
data = await response.json()
widget_states = data.get("widgetStates", {})
for key, value in widget_states.items():
if "webProductHeading" in key:
product_data["heading"] = json.loads(value)
page.on("response", handle_response)
await page.goto(url, wait_until="networkidle")
await browser.close()
return self._normalize_ozon(product_data)
Amazon через офіційний API
Для Amazon використовується Product Advertising API 5.0:
# scraper/amazon_pa.py
from paapi5_python_sdk import DefaultApi, SearchItemsRequest
class AmazonScraper:
def search_products(self, keywords: str):
request = SearchItemsRequest(
partner_tag=self.partner_tag,
keywords=keywords,
resources=["ItemInfo.Title", "Offers.Listings.Price"],
)
response = self.api.search_items(request)
return [self._normalize(item) for item in response.search_result.items]
Терміни розробки
| Маркетплейс | Складність | Термін |
|---|---|---|
| Wildberries (JSON API) | Середня | 3-5 днів |
| Ozon (Playwright) | Висока | 5-8 днів |
| Amazon (PA API) | Низька | 2-3 дні |
Парсер маркетплейсу з моніторингом та алертами — 5-8 робочих днів для 3-5 конкурентів.







