Привет! Сегодня научимся парсить 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 открывает много возможностей: от мониторинга цен до анализа рынка. Главное — быть аккуратным с запросами и не забывать про задержки. Удачи в парсинге! 💰