Назад к статьям

Парсинг Wildberries: сбор данных о товарах и ценах

Привет! Сегодня научимся парсить Wildberries — самый популярный маркетплейс в России. Почему это полезно? Мониторинг цен, анализ конкурентов, поиск выгодных предложений... В общем, куча применений! 🛒

С чего начать?

Wildberries использует API для загрузки данных. Это хорошо — значит, нам не нужно парсить HTML (хотя можно и так). Но API требует правильных заголовков и иногда токенов.

Парсим товары по поисковому запросу

Самый простой способ — использовать поиск. Вот как это делается:

import requests import json import time def search_wb(query, page=1): """Поиск товаров на Wildberries""" url = "https://search.wb.ru/exactmatch/ru/common/v4/search" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json', 'Referer': 'https://www.wildberries.ru/' } params = { 'query': query, 'resultset': 'catalog', 'limit': 100, 'sort': 'popular', 'page': page } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: data = response.json() return data.get('data', {}).get('products', []) return [] # Использование products = search_wb('ноутбук', page=1) for product in products: print(f"Название: {product.get('name')}") print(f"Цена: {product.get('salePriceU') / 100}₽") print(f"Рейтинг: {product.get('rating')}") print("---")

Получаем детальную информацию о товаре

Чтобы получить больше данных (описание, отзывы, характеристики), нужно запросить детальную страницу:

def get_product_details(product_id): """Получаем детальную информацию о товаре""" url = f"https://card.wb.ru/cards/detail" params = { 'nm': product_id } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json' } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: data = response.json() product = data.get('data', {}).get('products', [{}])[0] return { 'name': product.get('name'), 'price': product.get('salePriceU', 0) / 100, 'old_price': product.get('priceU', 0) / 100, 'rating': product.get('rating'), 'reviews': product.get('feedbacks'), 'brand': product.get('brand'), 'seller': product.get('supplier'), 'description': product.get('description', '') } return None # Использование details = get_product_details(12345678) print(json.dumps(details, ensure_ascii=False, indent=2))

Мониторинг цен

Создадим скрипт, который будет отслеживать изменения цен:

import json from datetime import datetime def monitor_price(product_id, check_interval=3600): """Мониторинг цены товара""" price_history = [] while True: details = get_product_details(product_id) if details: current_price = details['price'] timestamp = datetime.now().isoformat() price_history.append({ 'timestamp': timestamp, 'price': current_price, 'old_price': details.get('old_price') }) # Сохраняем историю with open(f'price_history_{product_id}.json', 'w') as f: json.dump(price_history, f, ensure_ascii=False, indent=2) print(f"[{timestamp}] Цена: {current_price}₽") time.sleep(check_interval) # Проверяем каждый час

Парсим отзывы

Отзывы хранятся отдельно. Вот как их получить:

def get_reviews(product_id, page=1): """Получаем отзывы о товаре""" url = "https://feedbacks1.wb.ru/feedbacks/v1/feedbacks" params = { 'imtId': product_id, 'skip': (page - 1) * 10, 'take': 10 } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json' } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: data = response.json() return data.get('feedbacks', []) return [] # Использование reviews = get_reviews(12345678, page=1) for review in reviews: print(f"Оценка: {review.get('productValuation')}/5") print(f"Текст: {review.get('text')}") print("---")

Важные моменты

  • Задержки: Не делай слишком много запросов подряд — добавь задержки между запросами.
  • Заголовки: Всегда используй правильные заголовки, иначе получишь блокировку.
  • Структура API: Wildberries может менять структуру API, так что будь готов к обновлениям.

Итоги

Парсинг Wildberries открывает много возможностей: от мониторинга цен до анализа рынка. Главное — быть аккуратным с запросами и не забывать про задержки. Удачи в парсинге! 💰