E-commerce
Smyths Toys Scraper
smythstoys.com
Smyths Toys est l'un des plus grands distributeurs de jouets du Royaume-Uni et d'Irlande, et smythstoys.com est protégé par la protection anti-bot d'Imperva, qui refuse les clients HTTP simples et même un vrai navigateur qui appelle l'API de données de la boutique sans les en-têtes de requête propres à la boutique. Un endpoint de plugin dédié renvoie le JSON que lit la boutique Smyths pour une page produit : le prix avec un éventuel ancien prix, le prix de vente conseillé et la remise, le statut et le message de stock pour la livraison à domicile, le statut et le message de stock pour le click & collect, les indicateurs de précommande et les dates de stock prévues, l'âge recommandé et le type de livraison. Passez un code produit, un lien produit ou lot smythstoys.com ou un lien de l'API product-inventory ; le JSON revient inchangé, donc le code écrit pour la réponse de Smyths continue de fonctionner. Avec mode=details, le même code renvoie ce qu'affiche la page produit, là aussi sous la forme du JSON de Smyths : la description, les caractéristiques principales, les avertissements de sécurité, la marque et l'EAN, et toute la galerie d'images avec ses vidéos. Pas encore de codes ? Le même endpoint cherche sur Smyths ou liste une catégorie et renvoie le code, le nom, le lien, le prix et la note de chaque produit, 60 par page et jusqu'à 600 par appel. Un produit (stock ou détails), ou une page de liste, correspond à une requête, et un code que Smyths ne connaît pas revient sous la forme de l'erreur de Smyths elle-même, sans frais. Aucun compte Smyths, aucune connexion ni clé d'API n'est nécessaire.
Ce que vous pouvez extraire
- Code et type du produit
- Prix, valeur, ancien prix, prix ultérieur, prix de vente conseillé et pourcentage de remise, en GBP
- Stock pour la livraison à domicile : statut du stock (en stock, en rupture), message de stock, messages de livraison, indicateur de précommande et date de stock prévue
- Stock pour le click & collect : statut du stock, message de stock et message de retrait
- Âge recommandé, type de livraison et messages marketing
- Détails de la page produit (mode=details) : nom, marque, EAN, description, caractéristiques principales, avertissements de sécurité et toute la galerie d'images avec ses vidéos
- Listes de recherche et de catégorie : code produit, nom, lien, prix, image, note et indicateur de lot, 60 par page
- Fil d'Ariane de la catégorie et sous-catégories avec leur nombre de produits
- Le JSON product-inventory et celui de la page produit de Smyths, inchangés
Endpoints dédiés
/marketplace/smyths-inventory Stock, détails, recherche et catégories des produits Smyths Toys
code (un code produit Smyths UK comme 156809, un lien produit ou lot smythstoys.com ou un lien de l'API product-inventory) renvoie le 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 et messages marketing ; les lots sont reconnus d'eux-mêmes. mode=details avec le même code renvoie le JSON à partir duquel Smyths construit sa page produit : name, brand, ean, description (HTML), webFeatures, les avertissements de sécurité euWarning, safetyText, urgentSafetyTextHeading et urgentSafetyTextDescription, productImages (thumbnail, original et zoom par emplacement de la galerie, vidéos en youtubeUrl), prices, averageRating, numberOfReviews et breadcrumb ; un lot ajoute subProducts. Un code que Smyths ne connaît pas répond 502 avec l'erreur JSON de Smyths elle-même et X-Origin-Status: 500, non facturé. query (une recherche, jusqu'aux 240 meilleurs résultats de Smyths) ou category (un code de catégorie comme SM0601 ou un lien de catégorie) renvoie products avec code, name, url, prices, currency, image, averageRating, productType et decals, ainsi que totalResults, totalPages et nextPage ; une catégorie ajoute title, breadcrumbs et subcategories avec leur nombre de produits. sort, page et max_results (1-600, 60 par page) parcourent les pages ; chaque page de liste correspond à une requête.
Comment le scraper
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); Les requêtes sont en POST et passent leurs paramètres dans la query string. Le rendu navigateur a toujours lieu : aucun flag à activer.
Exemple de réponse
{
"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" }
} Lire la documentation de l'API
Questions fréquentes
Est-il légal de scraper Smyths Toys ?
Collecter des données Smyths publiques comme les prix des produits et l'état du stock est licite dans de nombreuses juridictions, mais les règles dépendent de votre pays, des données collectées et de leur usage. ScrapeUnblocker renvoie les données produit publiques ; ce que vous collectez et la façon dont vous l'utilisez relèvent de votre responsabilité.
Comment scraper Smyths Toys sans se faire bloquer ?
Smyths est protégé par la protection anti-bot d'Imperva. Son API de données ne répond qu'à une session qui a passé la vérification de navigateur d'Imperva, depuis la même adresse IP, et seulement quand la requête porte les en-têtes qu'envoie la boutique Smyths elle-même ; tout le reste reçoit un 403 ou une requête maintenue ouverte jusqu'au timeout. Le plugin /marketplace/smyths-inventory garde un pool de ces sessions sur des sorties ISP, chacune créée par un vrai Chrome et utilisée pour un nombre limité d'appels, et passe à une session neuve quand Imperva en refuse une. Dans le benchmark de ScrapeUnblocker, il a renvoyé des données sur 100 % de 5 000 appels pour 5 000 produits différents, environ 1,0 s par appel avec 20 requêtes simultanées.
Quelles données Smyths Toys puis-je obtenir ?
Pour chaque produit : le prix avec la valeur, l'ancien prix, le prix ultérieur, le prix de vente conseillé et le pourcentage de remise, le statut du stock pour la livraison à domicile, le message de stock et les messages de livraison, s'il s'agit d'une précommande et la date de stock prévue, le statut du stock pour le click & collect et le message de retrait, l'âge recommandé, le type de livraison et les éventuels messages marketing. C'est le même JSON que lit la boutique Smyths pour sa page produit. Avec mode=details, vous obtenez aussi la page produit elle-même : nom, marque, EAN, description, caractéristiques principales, avertissements de sécurité et toute la galerie d'images avec ses vidéos.
Puis-je obtenir la description, les caractéristiques, les avertissements de sécurité et les images du produit ?
Oui : appelez le même endpoint avec mode=details et le code ou le lien du produit. Il renvoie, inchangé, le JSON à partir duquel Smyths construit sa page produit : name, brand, ean, description (HTML), webFeatures (la liste des caractéristiques principales), les avertissements de sécurité (euWarning, safetyText, urgentSafetyTextHeading, urgentSafetyTextDescription), productImages (chaque image de la galerie en thumbnail, original et zoom, et les vidéos sous forme de liens YouTube), prices, la note et le nombre d'avis, et pour un lot les produits qu'il contient (subProducts). Les lots sont reconnus d'eux-mêmes, et un produit correspond à une requête.
Je n'ai pas de codes produit. Comment les trouver ?
Cherchez avec query, ou listez une catégorie avec category : un code comme SM0601 (Toys), SM0602 (Baby), SM0603 (Outdoor) ou SM0604 (Gaming & Tech), ou n'importe quel lien de catégorie smythstoys.com. Chaque liste renvoie les codes, noms, liens, prix, images et notes des produits et signale les lots, 60 par page et jusqu'à 600 par appel, et une catégorie indique aussi ses sous-catégories avec leur nombre de produits. La recherche de Smyths renvoie ses 240 meilleurs résultats, alors qu'une catégorie liste tous ses produits, donc les catégories principales réunies donnent tout le catalogue. Chaque page de liste correspond à une requête ; passez ensuite les codes comme code pour le stock et le prix.
J'ai déjà des URL product-inventory de Smyths. Puis-je les utiliser telles quelles ?
Oui : passez chacune telle quelle comme code au plugin. Un lien de page produit ou de lot et un simple code produit fonctionnent aussi. /getPageSource ne sert pas les données produit, de recherche ou de catégorie de Smyths ; il répond à ces URL par un 400 qui indique l'endpoint du plugin et les paramètres à utiliser (mode=details pour une page produit).
Que se passe-t-il avec un code produit qui n'existe pas ?
Smyths répond à un code qu'il ne connaît pas par sa propre erreur JSON et un HTTP 500. Le plugin transmet ce JSON inchangé avec le statut 502 et l'en-tête X-Origin-Status: 500, et l'appel n'est pas facturé. Smyths envoie la même erreur lors d'une panne de son côté, donc réessayez un code qui fonctionnait auparavant.
Combien coûte le scraping de Smyths Toys ?
Un produit (stock ou détails), ou une page de liste (60 produits au plus), correspond à une requête. 1 requête = 1 crédit, 1,00 EUR pour 1 000 en Pay as you go, jusqu'à environ 0,55 EUR pour 1 000 avec l'offre Ultimate. Les blocages, les timeouts, les codes que Smyths ne connaît pas et les catégories inconnues ne sont pas facturés, et l'essai gratuit comprend 500 requêtes sans carte.
Scrapers similaires
Smyths Toys et les autres noms et marques de smythstoys.com appartiennent à leur titulaire et ne servent ici qu'à désigner le site avec lequel cette API fonctionne. ScrapeUnblocker est un service indépendant, sans lien avec le titulaire de smythstoys.com, et n'est ni approuvé ni parrainé par lui.
Commencez à scraper ce site dès aujourd'hui
Palier gratuit inclus. Aucune carte bancaire requise pour tester.