Comment récolter les données sur le shop Supreme en utilisant Python 3 et Selenium

Marque de prêt-à-porter avec une offre limitée plébiscitée par les jeunes générations, Supreme propose une offre limitée, haut de gamme, et toujours changente. Dans cet article, nous allons voir comment il est possible de récupérer les infos concernants leurs produits en utilisant Python 3 et le navigateur à distance, Selenium.
Dans cet article, nous allons extraire l’ensemble des données du shop Supreme : http://www.supremenewyork.com/shop
Quelles données allons-nous extraire ?
Vous trouverez ci-dessous la liste des champs que nous allons extraire :
- Nom
- Description
- Image
- Prix
- Disponibilité
Veuillez trouver ci-dessous un screenshot de la donnée que nous allons extraire.
Trouvez la donnée
Avant de commencer à construire le scraper, nous devons trouver où les données sont présentes dans les balises HTML de la page Web. Il faut connaître le fonctionnement des balises HTML de la page pour pouvoir faire ça.
Nous allons supposer que vous avez déjà des bases en HTML et que vous connaissez le langage Python. Vous n’avez pas besoin de plus de connaissances pour réaliser ce tutoriel.
Si vous ne connaissez ni le HTML, ni le CSS, ni le Python, prenez le temps de lire Premiers pas avec HTML – Mozilla Developer Network, Tutoriel CSS W3 School, et https://www.programiz.com/python-programming
Nous allons inspecter le code HTML de la page Web et localiser les données, en suivant la logique suivante :
- Inspecter l’élément
- Trouver la balise correspondante
Inspecter l’HTML
Ouvrez votre navigateur Chrome, et rendez-vous sur le site de Supreme : http://www.supremenewyork.com/shop/. Vous pouvez le faire avec d’autres navigateurs, mais ce tutoriel se fait sur Chrome, et facilitera votre apprentissage.
Choisissez un élément du shop au hasard. Ici, nous avons choisi cet item là : http://www.supremenewyork.com/shop/jackets/fa5uzyo2d/n5m2xirug. Attention, il ne sera peut-être plus présent entre temps, tout part très vite !
Faites, un clique droit, puis cliquer sur Inspecter.
Nous allons maintenant chercher le tag CSS de chaque élément, avant de lancer notre scraper. Pour faciliter la recherche, cliquer sur le curseur en bas à gauche. Passez ensuite votre souris sur les éléments que nous avons cités en introduction.
Sur le gif ci-dessus nous inspectons chaque élément, et voilà les classes qui en ressortent :
- Nom : h1.protect
- Description : p.description
- Image : img#img-main
- Prix : p.price span
- Disponibilité : input.button
Comment configurer son ordinateur pour le Web Scraping
Nous allons utiliser Python 3 pour ce tutoriel. Pour commencer, vous avez besoin d’un ordinateur avec Python 3 et PIP installé dedans.
La plupart des systèmes d’exploitation UNIX comme Linux et Mac OS sont livrés avec Python déjà installé. Mais, tous les systèmes d’exploitation Linux ne sont pas livrés avec Python 3 par défaut.
Vérifions votre version de python. Ouvrez un terminal (sous Linux et Mac OS) ou Invite de commandes (sous Windows) et tapez
1 |
python --version |
Si vous n’avez pas Python 3, il va falloir l’installer.
Installer Python et Selenium
Pour installer Python et PIP, vous pouvez vous rendre sur le post que nous avons déjà fait à ce sujet : https://lobstr.io/index.php/2018/02/15/installer-librairies-python-mac-os/
Pour installer Selenium, il suffit d’ouvrir votre commande, et de
1 |
pip install selenium |
Pour plus de renseignements sur Selenium et ses fonctionnalités avec Python, leur documentation est fournie et très utile : http://selenium-python.readthedocs.io/index.html
Le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# python package import csv import time import random import sys # selenium package from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import TimeoutException from selenium.common.exceptions import UnexpectedAlertPresentException from selenium.common.exceptions import WebDriverException # configurer webdriver capa = DesiredCapabilities.CHROME capa["pageLoadStrategy"] = "none" driver = webdriver.Chrome(desired_capabilities=capa) driver1 = webdriver.Chrome(desired_capabilities=capa) wait = WebDriverWait(driver, 20) wait1 = WebDriverWait(driver1, 20) # aller sur la page d accueil base_url = "http://www.supremenewyork.com/shop" driver.get(base_url) # attendre le chargement try: wait.until(EC.element_to_be_clickable( (By.ID, "shop-scroller")) ) except (TimeoutException): sys.exit("Error message - loading page") # ouvrir csv with open('supreme_items.csv', 'w') as csvfile: cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) # ouvrir toutes les pages produits products = driver.find_elements_by_xpath("//ul[@id='shop-scroller']/li") i = 1 for product in products: # creer tableau csv_row = [] # aller sur la page produit url_product = product.find_element_by_css_selector("a").get_attribute('href') csv_row.append(url_product) print (i) print(url_product) i = i + 1 driver1.get(url_product) wait1.until(EC.element_to_be_clickable( (By.CSS_SELECTOR, "img#img-main")) ) # PRENDRE LES INFORMATIONS # disponibilite try: driver1.find_element_by_css_selector("b.button.sold-out") print("Product " + url_product + " is sold out") product_availability = "0" csv_row.append(product_availability) except(NoSuchElementException): print("Product " + url_product + " is available") product_availability = "1" csv_row.append(product_availability) # nom try: product_name = driver1.find_element_by_css_selector("h1.protect").text.encode('utf-8') csv_row.append(product_name) except (NoSuchElementException): print("Element from " + url_product + " has no name") finally: pass # prix try: product_price = driver1.find_element_by_css_selector("p.price span").text.encode('utf-8') csv_row.append(product_price) except (NoSuchElementException): print("Element from " + url_product + " has no price") finally: pass # image try: product_picture = driver1.find_element_by_css_selector("img#img-main").get_attribute('src') csv_row.append(product_picture) except (NoSuchElementException): print("Element from " + url_product + " has no picture") finally: pass # description try: product_description = driver1.find_element_by_css_selector("p.description").text.encode('utf-8') csv_row.append(product_description) except (NoSuchElementException): print("Element from " + url_product + " has no description") finally: pass # copier dans le csv try: cwriter.writerow(csv_row) print("Row written") except(WebDriverException): print("Error message - csv") finally: pass # fermer les navigateurs print("Tout est bien la, chef !") driver.close() driver1.close() |
Pour exécuter le script, ouvrez votre éditeur Sublime Text 3, copier-coller le code ci contre, et enregistrez le sous le nom de supreme_extract.py. Si vous ne savez pas comment l’installer, rendez-vous ici : https://lobstr.io/index.php/2018/02/08/comment-pourquoi-installer-sublim-text/
Dans votre commande, placez ensuite la ligne suivante :
1 |
python supreme_extract.py |
Deux navigateurs vont s’ouvrir simultanément, et vous pourrez observer sur l’un d’entre eux, la collecte de données. En direct.
Vous devriez retrouver dans le même dossier que le dossier où se trouve le script, un fichier .csv, nommé supreme_items.csv. Qui ressemble a ce qui suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
http://www.supremenewyork.com/shop/shoes/x8p0bikrx 0 |Supreme®/Vans® Skull Pile Sk8-Hi| €110 http://www.supremenewyork.com/shop/shoes/hbmipeway 0 |Supreme®/Vans® Skull Pile Slip-On| €98 http://www.supremenewyork.com/shop/jackets/qjrd3wb7h 0 |Studded Arc Logo Leather Jacket| €598 http://www.supremenewyork.com/shop/jackets/j3e7089os 0 |Sleeve Script Sideline Jacket| €198 http://www.supremenewyork.com/shop/jackets/fr091m6lp 1 |Infantry Jacket| €328 http://www.supremenewyork.com/shop/jackets/fa5uzyo2d 1 |Gradient Puffy Jacket| €338 http://www.supremenewyork.com/shop/jackets/iqale9x3h 1 |Tiger Stripe Track Jacket| €188 http://www.supremenewyork.com/shop/shirts/ny32gadwp 0 |Zip Up Work Shirt| €128 http://www.supremenewyork.com/shop/shirts/mwbqz9ady 1 |Tartan Flannel Shirt| €118 http://www.supremenewyork.com/shop/shirts/wdbmqgcwx 0 |Pin Up Work Shirt| €128 http://www.supremenewyork.com/shop/shirts/qmi8o1sej 0 |Corduroy Half Zip Shirt| €128 http://www.supremenewyork.com/shop/tops-sweaters/x3s9hrgqv 0 |Dashes Zip Up Knit Polo| €158 http://www.supremenewyork.com/shop/tops-sweaters/oe4i7udtz 0 |Brushed Argyle Cardigan| €158 http://www.supremenewyork.com/shop/sweatshirts/l2daxnlbq 0 |Diagonal Hooded Sweatshirt| €158 http://www.supremenewyork.com/shop/sweatshirts/ds382pkuh 1 |World Famous Zip Up Hooded Sweatshirt| €158 http://www.supremenewyork.com/shop/sweatshirts/e8u2lazei 0 |Color Blocked Half Zip Sweatshirt| €148 http://www.supremenewyork.com/shop/tops-sweaters/yslvijehd 0 |Corduroy Baseball Jersey| €138 http://www.supremenewyork.com/shop/tops-sweaters/y2jy1v9me 1 |Multi Stripe L/S Top| €110 http://www.supremenewyork.com/shop/tops-sweaters/yd2xh5wau 0 |Stacked L/S Top| €88 http://www.supremenewyork.com/shop/tops-sweaters/ke0mbug8j 1 |Ankh Hockey Jersey| €148 http://www.supremenewyork.com/shop/tops-sweaters/f2udhk46j 0 |Pocket Tee| €62 http://www.supremenewyork.com/shop/pants/wg7y2r9ub 1 |Tiger Stripe Track Pant| €124 http://www.supremenewyork.com/shop/pants/fv54jrd8a 0 |Work Pant| €116 http://www.supremenewyork.com/shop/pants/nfbyd2gv0 1 |Washed Regular Jeans| €148 http://www.supremenewyork.com/shop/pants/f1qf9sjip 0 |Stone Washed Slim Jeans| €158 http://www.supremenewyork.com/shop/pants/gm6c45beo 1 |Rigid Slim Jeans| €148 http://www.supremenewyork.com/shop/pants/szdkm35rw 1 |Stone Washed Black Slim Jeans| €148 http://www.supremenewyork.com/shop/hats/banpuqk05 1 |Coated Linen Camp Cap| €50 http://www.supremenewyork.com/shop/hats/y0psd46yh 0 |Bouclé Camp Cap| €56 http://www.supremenewyork.com/shop/hats/fsaig3xh9 1 |Denim Suede Compact Logo 6-Panel| €60 http://www.supremenewyork.com/shop/hats/i4ka0wrl7 0 |Repeat Mesh Back 5-Panel| €42 http://www.supremenewyork.com/shop/hats/bs7fq1mne 1 |Repeater Camp Cap| €50 http://www.supremenewyork.com/shop/hats/ft8xu1qv2 1 |Side Pocket Script Logo 6-Panel| €56 http://www.supremenewyork.com/shop/hats/nu6k1cxnv 1 |Ecstasy 6-Panel| €50 http://www.supremenewyork.com/shop/bags/fvcyjzfbp 0 Backpack €158 http://www.supremenewyork.com/shop/bags/iej5lxwui 1 |Duffle Bag| €158 http://www.supremenewyork.com/shop/bags/i8tqkmn2p 1 |Large Duffle Bag| €168 http://www.supremenewyork.com/shop/bags/z0sqjcnl6 1 |Waist Bag| €88 http://www.supremenewyork.com/shop/bags/srva6uhn5 0 |Shoulder Bag| €54 http://www.supremenewyork.com/shop/accessories/rahf02b6w 1 |Justice Gold Pendant| €398 http://www.supremenewyork.com/shop/accessories/mqs06m8wd 0 |Supreme®/Wilson® Tennis Balls| €16 http://www.supremenewyork.com/shop/accessories/aqw3ftsdb 1 |Studded Logo Belt| €148 http://www.supremenewyork.com/shop/accessories/ml460jzk2 0 |Skull Pile Bandana| €24 http://www.supremenewyork.com/shop/accessories/nd2huprf0 0 |Supreme®/Hanes® Tagless Tees (3 Pack)| €28 http://www.supremenewyork.com/shop/accessories/sxvq2dh6s 0 |Supreme®/Hanes® Boxer Briefs (4 Pack)| €36 http://www.supremenewyork.com/shop/accessories/s4ga9risj 0 |Supreme®/Hanes® Crew Socks (4 Pack)| €20 http://www.supremenewyork.com/shop/accessories/nxk3adcp6 0 |Bevel Logo Keychain| €14 http://www.supremenewyork.com/shop/accessories/o6i83bkgo 1 |Molotov Pin| €8 http://www.supremenewyork.com/shop/skate/teiunwfb3 1 |Supreme®/Independent® Truck| €80 http://www.supremenewyork.com/shop/skate/zbrefmy6o 1 |Supreme®/Spitfire® Classic Wheels (Set of 4)| €45 http://www.supremenewyork.com/shop/skate/z73gb4ai2 1 |Chicken Dinner Skateboard| €60 |
Vous pouvez également télécharger le code sur notre Github, à l’adresse suivante : https://gist.github.com/Lobstrio/7f68492c218a52231b132216335b83e3. N’hésitez pas à nous indiquer dans les commentaires, ou sur le github, si le script fonctionne bien chez vous aussi.
Limitations connues
Le script permet de collecter les données, et de les enregistrez au format .csv. Toutefois, les informations récoltées seront toujours identiques, et il est possible que le script cesse de fonctionner si le site web change sa structure, ou met en place des mesures de bannissement d’IP.
Si vous avez besoin d’aide pour scraper des milliers de données de façon récurrente et à grande échelle, vous pouvez nous contacter via le formulaire ci-dessous :
Avertissement: Tout code fourni dans nos tutoriels est destiné à des fins d’illustration et d’apprentissage uniquement. Nous ne sommes pas responsables de la façon dont il est utilisé et n’assumons aucune responsabilité pour toute utilisation préjudiciable du code source. La simple présence de ce code sur notre site n’implique pas que nous encourageons le scraping ou l’extraction de données des sites référencés dans le code et le tutoriel qui l’accompagne. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers web pour les sites internet populaires. Nous ne sommes pas obligés de fournir un support pour le code, cependant, si vous ajoutez vos questions dans la section des commentaires, nous pouvons vous y répondre périodiquement.