E-commerce
Smyths Toys Scraper
smythstoys.com
Smyths Toys es una de las mayores jugueterías del Reino Unido e Irlanda, y smythstoys.com está protegido por la protección contra bots de Imperva, que rechaza los clientes HTTP simples e incluso a un navegador real que llama a la API de datos de la tienda sin las cabeceras de petición propias de la tienda. Un endpoint de plugin dedicado devuelve el JSON que lee la tienda de Smyths para una página de producto: el precio con cualquier precio anterior, PVP recomendado y descuento, el estado y el mensaje de stock para envío a domicilio, el estado y el mensaje de stock para click & collect, los indicadores de preventa y las fechas previstas de stock, la edad recomendada y el tipo de envío. Pasa un código de producto, un enlace de producto o de pack de smythstoys.com o un enlace de la API product-inventory; el JSON se devuelve sin cambios, así que el código escrito contra la respuesta de Smyths sigue funcionando. Con mode=details, el mismo código devuelve lo que muestra la página de producto, también como el propio JSON de Smyths: la descripción, las características principales, las advertencias de seguridad, la marca y el EAN, y la galería completa de imágenes con sus vídeos. ¿Aún no tienes códigos? El mismo endpoint busca en Smyths o lista una categoría y devuelve el código, el nombre, el enlace, el precio y la valoración de cada producto, 60 por página y hasta 600 por llamada. Un producto (stock o detalles), o una página de listado, es una petición, y un código que Smyths no conoce vuelve como el propio error de Smyths sin coste. No hace falta cuenta de Smyths, inicio de sesión ni clave de API.
Qué puedes extraer
- Código y tipo de producto
- Precio, valor, precio anterior, precio posterior, PVP recomendado y porcentaje de descuento, en GBP
- Stock para envío a domicilio: estado del stock (en stock, agotado), mensaje de stock, mensajes de envío, indicador de preventa y fecha prevista de stock
- Stock para click & collect: estado del stock, mensaje de stock y mensaje de recogida
- Edad recomendada, tipo de envío y mensajes de marketing
- Detalles de la página de producto (mode=details): nombre, marca, EAN, descripción, características principales, advertencias de seguridad y la galería completa de imágenes con vídeos
- Listados de búsqueda y de categoría: código de producto, nombre, enlace, precio, imagen, valoración e indicador de pack, 60 por página
- Ruta de la categoría y subcategorías con su número de productos
- El JSON product-inventory y el de la página de producto de Smyths, sin cambios
Endpoints dedicados
/marketplace/smyths-inventory Stock, detalles, búsqueda y categorías de productos de Smyths Toys
code (un código de producto de Smyths UK como 156809, un enlace de producto o de pack de smythstoys.com o un enlace de la API product-inventory) devuelve el JSON product-inventory de Smyths: code, type, prices (price, value, wasPrice, thenPrice, rrpPrice, discountedPercentage), hdSection (stockStatus, stockMessage, guestDeliveryMessage, isAvailableForDelivery, isPreOrder, expectedStockDate), ccSection (stockStatus, stockMessage, deliveryMessage), ageSuitabilities, carrierType y mensajes de marketing; los packs se reconocen solos. mode=details con el mismo code devuelve el JSON con el que se construye la página de producto de Smyths: name, brand, ean, description (HTML), webFeatures, las advertencias de seguridad euWarning, safetyText, urgentSafetyTextHeading y urgentSafetyTextDescription, productImages (thumbnail, original y zoom por posición de la galería, vídeos como youtubeUrl), prices, averageRating, numberOfReviews y breadcrumb; un pack añade subProducts. Un código que Smyths no conoce responde 502 con el propio error JSON de Smyths y X-Origin-Status: 500, sin facturar. query (una búsqueda, hasta los 240 mejores resultados de Smyths) o category (un código de categoría como SM0601 o un enlace de categoría) devuelve products con code, name, url, prices, currency, image, averageRating, productType y decals, además de totalResults, totalPages y nextPage; una categoría añade title, breadcrumbs y subcategories con su número de productos. sort, page y max_results (1-600, 60 por página) recorren las páginas; cada página de listado es una petición.
Cómo rastrearlo
curl -X POST \
-H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
"https://api.scrapeunblocker.com/marketplace/smyths-inventory?code=156809"import requests
resp = requests.post(
"https://api.scrapeunblocker.com/marketplace/smyths-inventory",
headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
params={"code": "156809"},
)
print(resp.text)import { ScrapeUnblockerClient } from 'scrapeunblocker';
const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });
const item = await su.smythsInventory('156809');
console.log(item.prices.price, item.hdSection.stockStatus, item.ccSection.stockStatus);
console.log(item); Las peticiones son POST y sus parámetros van en la query string. El renderizado en navegador siempre ocurre: no hay ningún flag que activar.
Ejemplo de respuesta
{
"code": "156809",
"type": "REGULAR",
"ageSuitabilities": [ "5 Years +" ],
"primaryMarketingMessage": null,
"hdSection": {
"stockStatus": "INSTOCK",
"stockMessage": "In Stock",
"guestDeliveryMessage": "Free delivery on orders over £20",
"registeredDeliveryMessage": "Free delivery on orders over £20",
"isAvailableForDelivery": true,
"isPreOrder": false,
"inStore": false,
"expectedStockDate": null
},
"ccSection": {
"stockStatus": "INSTOCK",
"stockMessage": "In Stock",
"deliveryMessage": "FREE collection within 2 hours",
"storeName": null,
"isPreOrder": false,
"expectedStockDate": null,
"storeClosed": false,
"isAvailableForDelivery": true
},
"carrierType": {
"name": "REGULAR",
"isGuestFreeDelivery": false,
"isRegisteredFreeDelivery": false,
"isSpecialDelivery": false
},
"prices": {
"price": "£9.99",
"thenPrice": null,
"wasPrice": null,
"rrpPrice": null,
"value": "9.99",
"discountedPercentage": null
},
"decals": null,
"paymentMessage": { "currency": "GBP", "country": "GB" }
} Preguntas frecuentes
¿Es legal hacer scraping de Smyths Toys?
Recopilar datos públicos de Smyths como los precios y el estado del stock de los productos es lícito en muchas jurisdicciones, pero las normas dependen de tu país, de los datos que recopiles y de cómo los uses. ScrapeUnblocker devuelve los datos públicos de los productos; qué recopilas y cómo lo usas es responsabilidad tuya.
¿Cómo hago scraping de Smyths Toys sin que me bloqueen?
Smyths está protegido por la protección contra bots de Imperva. Su API de datos solo responde a una sesión que ha superado la comprobación de navegador de Imperva, desde la misma dirección IP, y solo cuando la petición lleva las cabeceras que envía la propia tienda de Smyths; cualquier otra cosa recibe un 403 o una petición que queda abierta hasta agotar el tiempo. El plugin /marketplace/smyths-inventory mantiene un conjunto de esas sesiones en exits ISP, cada una creada por un Chrome real y usada para un número limitado de llamadas, y pasa a una sesión nueva cuando Imperva rechaza una. En el benchmark de ScrapeUnblocker devolvió datos en el 100 % de 5.000 llamadas para 5.000 productos distintos, unos 1,0 s por llamada con 20 peticiones simultáneas.
¿Qué datos de Smyths Toys puedo obtener?
Para cada producto: el precio con su valor, precio anterior, precio posterior, PVP recomendado y porcentaje de descuento, el estado del stock para envío a domicilio, el mensaje de stock y los mensajes de envío, si es una preventa y la fecha prevista de stock, el estado del stock para click & collect y el mensaje de recogida, la edad recomendada, el tipo de envío y los mensajes de marketing. Es el mismo JSON que lee la tienda de Smyths para su página de producto. Con mode=details obtienes además la propia página de producto: nombre, marca, EAN, descripción, características principales, advertencias de seguridad y la galería completa de imágenes con vídeos.
¿Puedo obtener la descripción, las características, las advertencias de seguridad y las imágenes del producto?
Sí: llama al mismo endpoint con mode=details y el código o enlace del producto. Devuelve, sin cambios, el JSON con el que se construye la página de producto de Smyths: name, brand, ean, description (HTML), webFeatures (la lista de características principales), las advertencias de seguridad (euWarning, safetyText, urgentSafetyTextHeading, urgentSafetyTextDescription), productImages (cada imagen de la galería como thumbnail, original y zoom, y los vídeos como enlaces de YouTube), prices, la valoración y el número de reseñas, y para un pack los productos que contiene (subProducts). Los packs se reconocen solos, y un producto es una petición.
No tengo códigos de producto. ¿Cómo los encuentro?
Busca con query o lista una categoría con category: un código como SM0601 (Toys), SM0602 (Baby), SM0603 (Outdoor) o SM0604 (Gaming & Tech), o cualquier enlace de categoría de smythstoys.com. Cada listado devuelve los códigos, nombres, enlaces, precios, imágenes y valoraciones de los productos y marca los packs, 60 por página y hasta 600 por llamada, y una categoría también lista sus subcategorías con su número de productos. La búsqueda de Smyths devuelve sus 240 mejores resultados, mientras que una categoría lista todos sus productos, así que las categorías principales juntas dan el catálogo completo. Cada página de listado es una petición; después pasa los códigos como code para obtener stock y precio.
Ya tengo URL product-inventory de Smyths. ¿Puedo usarlas tal cual?
Sí: pasa cada una como code al plugin, sin cambios. Un enlace de página de producto o de pack y un código de producto también funcionan. /getPageSource no sirve los datos de productos, búsquedas ni categorías de Smyths; responde a esas URL con un 400 que indica el endpoint del plugin y los parámetros que hay que usar (mode=details para una página de producto).
¿Qué pasa con un código de producto que no existe?
Smyths responde a un código que no conoce con su propio error JSON y HTTP 500. El plugin devuelve ese JSON sin cambios con estado 502 y la cabecera X-Origin-Status: 500, y la llamada no se factura. Smyths envía el mismo error durante una caída en su lado, así que reintenta un código que antes funcionaba.
¿Cuánto cuesta hacer scraping de Smyths Toys?
Un producto (stock o detalles), o una página de listado de hasta 60 productos, es una petición. 1 petición = 1 crédito, 1,00 EUR por cada 1.000 en Pay as you go, bajando hasta unos 0,55 EUR por cada 1.000 en el plan Ultimate. No se facturan los bloqueos, los timeouts, los códigos que Smyths no conoce ni las categorías inexistentes, y la prueba gratuita incluye 500 peticiones sin tarjeta.
Scrapers relacionados
Smyths Toys y los demás nombres y marcas de smythstoys.com pertenecen a su titular y aquí se usan solo para identificar el sitio web con el que funciona esta API. ScrapeUnblocker es un servicio independiente: no está afiliado al titular de smythstoys.com ni cuenta con su respaldo o patrocinio.
Empieza a rastrear este sitio hoy
Plan gratuito incluido. No necesitas tarjeta para probarlo.