Dans le monde du commerce en ligne qui est en constante évolution, garder une longueur d’avance implique de surveiller la concurrence. Le web scraping, qui est une technique d’extraction de données de sites web, est une méthode possible pour ce faire. Que vous soyez un développeur chevronné ou un novice qui fait ses premiers pas dans l’univers de l’extraction de données, cet article est conçu pour vous aider à comprendre les tenants et les aboutissants du web scraping sur les sites de commerce en ligne.
Le web scraping de sites de commerce en ligne peut vous intéresser pour toutes sortes de raisons : analyse concurrentielle, études de marché, veille tarifaire, génération de prospects, ou autre prise de décision basée sur les données.
Dans ce tutoriel, vous découvrirez certains des problèmes courants auxquels vous serez confronté lors de l’extraction de données de sites de commerce en ligne et la manière de les résoudre à l’aide de Playwright, qui est une bibliothèque Python, et du navigateur Scraping Browser de Bright Data.
Problèmes rencontrés en faisant du web scraping avec des navigateurs locaux
L’écriture de web scrapers vous permettant d’extraire de grandes quantités de données vous ouvre des possibilités incroyables, mais le faire pour la première fois peut s’avérer difficile. Par exemple, lorsqu’ils utilisent des navigateurs locaux, les développeurs se heurtent souvent à divers problèmes susceptibles d’entraver leur efficacité. Voici quelques-uns des problèmes les plus courants :
- Blocage d’adresse IP : les sites web suivent souvent les adresses IP qui émettent des requêtes. S’ils détectent un nombre anormal de requêtes provenant d’une même adresse IP (ce qui est typique des processus de web scraping ou d’attaque par force brute), ils peuvent bloquer cette adresse IP. Lorsque vous utilisez un navigateur local, toutes les requêtes proviennent d’une même adresse IP, ce qui constitue un problème significatif.
- Limitation de débit : de nombreux sites web imposent une limitation de débit en restreignant le nombre de requêtes pouvant être traitées dans un laps de temps donné en provenance d’une même adresse IP. Si cette limite est dépassée, toute requête supplémentaire peut être bloquée ou ralentie, ce qui entrave le processus de web scraping.
- Manque de proxys : sans pool de proxys, toutes les requêtes lancées dans le cadre d’une opération de web scraping proviennent de la même adresse IP. Cela permet aux sites web de détecter et de bloquer plus facilement cette activité de web scraping. En revanche, l’utilisation d’un pool de proxys permet de faire en sorte que les requêtes proviennent d’adresses IP différentes, ce qui réduit le risque de détection.
- Problèmes liés aux CAPTCHA : les sites web peuvent utiliser des CAPTCHA pour vérifier qu’ils ont affaire à un utilisateur humain et non à un bot. Les navigateurs locaux manquent souvent de fonctionnalités pour résoudre automatiquement ce genre de problème, ce qui contrarie notablement les efforts de web scraping.
- Sites web à contenu dynamique : de nombreux sites web modernes utilisent JavaScript pour charger des contenus de manière dynamique. Un navigateur local peut avoir du mal à extraire correctement des données de ce genre de sites, car le contenu de ces derniers peut ne pas être entièrement chargé avant le début du processus de web scraping.
La combinaison de tous ces problèmes compliquent singulièrement le web scraping sur navigateur local. Le manque de fonctionnalités avancées, telles que la rotation d’adresses IP et la résolution automatique de CAPTCHA, peut ralentir les processus de web scraping et diminuer la qualité et la quantité des données collectées. Il est crucial que les développeurs soient conscients de ces problèmes courants et recherchent des outils et des techniques pour les contourner efficacement.
Dans la section suivante, nous verrons comment le navigateur Scraping Browser de Bright Data peut vous aider à résoudre ces problèmes et à rendre le web scraping beaucoup plus fluide et plus productif.
Comment faire du web scraping avec le Scraping Browser de Bright Data
Dans le monde du web scraping, Bright Data est reconnu comme un fournisseur de premier plan ; et son navigateur Scraping Browser, qui est un outil spécifiquement conçu pour relever les défis liés à l’extraction de données, occupe une place centrale dans ses offres.
Le Scraping Browser résout facilement tous les problèmes de blocage d’adresse IP, car il a accès à un pool étendu d’adresses IP, résidentielles et mobiles. Cela signifie que vous pouvez faire tourner des adresses IP et simuler le comportement organique d’un ensemble d’utilisateurs, ce qui réduit considérablement le risque de vous faire bloquer.
De même, en tirant parti du vaste pool d’adresses IP de Bright Data, le Scraping Browser peut distribuer vos requêtes sur plusieurs adresses IP, ce qui atténue notablement le problème de limitation de débit. De plus, avec le scraping Browser, vous bénéficiez d’une gestion automatique des proxys. Cela signifie que le Scraping Browser gère la rotation des proxys, de sorte que vos activités de web scraping puissent se dérouler sans intervention manuelle.
Le Scraping Browser offre également une protection avancée des empreintes de navigateur, ce qui vous permet d’imiter le comportement d’un utilisateur réel. Ainsi, il est plus difficile pour les sites de détecter et de bloquer vos opérations de web scraping.
En gardant ces fonctionnalités à l’esprit, plongez-vous dans le tutoriel et apprenez à utiliser le Scraping Browser de Bright Data pour extraire les données des sites web de commerce en ligne. Vous utiliserez Python comme langage de programmation.
Étape 1 : configurez un nouveau projet Python
La première étape de ce tutoriel consiste à mettre en place un nouveau projet Python. Il s’agit de votre espace de travail pour cette tâche de web scraping. Vous pouvez utiliser n’importe quel éditeur de texte ou environnement de développement intégré (IDE) de votre choix.
Assurez-vous également que Python est installé sur votre machine. Vous pouvez vérifier cela en tapant python --version
sur votre terminal. Si Python est installé, cette commande renvoie son numéro de version. Dans le cas contraire, vous devez l’installer.
Une fois que vous vous êtes assuré que Python est bien installé, il est temps de créer votre répertoire de projet. Ouvrez votre terminal et naviguez jusqu’à l’endroit où vous souhaitez installer votre projet. Entrez ensuite les commandes suivantes :
mkdir ecommerce-scraping # This command creates a new directory named ecommerce-scraping.
cd ecommerce-scraping # This command navigates into the newly created directory.
python -m venv env # This command creates a new virtual environment in your project directory.
source env/bin/activate # This command activates the virtual environment.
Créer un environnement virtuel est une bonne pratique, car cela permet d’isoler votre projet et ses dépendances des autres projets Python, et ainsi d’éviter tout conflit entre les différentes versions des bibliothèques.
Étape 2 : importez Playwright dans le projet
Playwright est une bibliothèque Python utilisée pour l’automatisation et les tests des navigateurs web. Vous l’utiliserez pour contrôler votre Scraping Browser.
Pour installer Playwright, utilisez pip, qui est un programme d’installation de packages pour Python :
pip install playwright
Après avoir installé Playwright, vous devez exécuter la commande playwright install
. Cela permet de télécharger les binaires de navigateur dont Playwright a besoin pour automatiser les navigateurs :
playwright install
Étape 3 : configurez un nouveau compte Bright Data
Ensuite, vous avez besoin d’un compte Bright Data. Si vous n’en avez pas, accédez au site web de Bright Data et inscrivez-vous. Une fois que vous avez un compte, vous pouvez créer et gérer vos instances de Scraping Browser et accéder à vos identifiants personnels :
Étape 4 : créez une nouvelle instance de Scraping Browser
Une fois que vous avez accès à un compte Bright Data, connectez-vous et accédez à la section Scraping Browser, où vous pouvez créer une nouvelle instance de Scraping Browser.
Notez votre ID hôte, car vous en aurez besoin lorsque vous vous connecterez au Scraping Browser :
Étape 5 : connectez-vous à l’instance de Scraping Browser
Il est maintenant temps de connecter Playwright à votre instance de Scraping Browser. Bright Data fournit dans sa documentation un exemple de script, que vous pouvez utiliser comme point de départ. N’oubliez pas de remplacer YOUR_ZONE_USERNAME
, YOUR_ZONE_PASSWORD
et YOUR_ZONE_HOST
par vos informations d’identification Bright Data réelles et par l’ID de l’instance de Scraping Browser que vous avez créée :
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://example.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
Enregistrez ce fichier sous le nom main.py
dans le répertoire de votre projet. Puis exécutez le script à l’aide de la commande suivante :
python main.py
Ce script permet de lancer une nouvelle instance du navigateur Chromium et d’accéder à l’URL que vous avez spécifiée. Il restitue ensuite le contenu de la page web, puis ferme le navigateur.
À ce stade, vous pouvez constater que vous êtes en mesure de vous connecter à l’instance de Scraping Browser. Puisqu’il s’agit de votre script de base, examinez rapidement le code :
import asyncio, async_playwright
sont les importations requises pour le script.asyncio
est une bibliothèque permettant d’écrire du code mono-thread en utilisant des coroutines de manière concurrente, etasync_playwright
est l’API asynchrone de la bibliothèque Playwright.auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD’
permet de configurer l’authentification pour le Scraping Browser de Bright Data en utilisant le nom d’utilisateur et le mot de passe de votre zone.browser_url = f'wss ://{auth}@YOUR_ZONE_HOST
permet de construire l’URL WebSocket qui se connecte au Scraping Browser de Bright Data.browser = await pw.chromium.connect_over_cdp(browser_url)
permet de se connecter au Scraping Browser de Bright Data à l’aide du navigateur Chromium. Le mot cléawait
interrompt l’exécution de la fonction jusqu’à ce que la connexion soit établie.await page.goto(’https://example.com’, timeout=120000)
permet de naviguer jusqu’à l’URL spécifiée. Le paramètretimeout
spécifie combien de temps il faut attendre que la navigation se termine avant de lancer une erreur.print(await page.evaluate('()=>document.documentElement.outerHTML'))
permet d’évaluer le code JavaScript dans le contexte de la page et d’afficher le résultat. Dans ce cas, le code JavaScript renvoie tout le contenu HTML de la page.
Étape 6 : collectez des données sur un site de commerce en ligne
Une fois connecté à l’instance de Scraping Browser, vous êtes prêt à commencer votre web scraping. Dans ce tutoriel, vous allez extraire des données dans Books to Scrape, qui est un site permettant aux novices de s’exercer au web scraping sur les sites de commerce en ligne.
Ouvrez votre fichier main.py
et remplacez son contenu par le code suivant, puis exécutez le script dans votre terminal :
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
Vous pouvez voir que le contenu de la page d’accueil de Books to Scrape s’affiche. À ce stade, l’exécution de ce script ne retourne rien d’utile ; vous obtenez simplement l’intégralité du contenu HTML de votre site web cible.
Étape 7 : extrayez des informations structurées
Pour rendre ce tutoriel un peu plus utile, extrayez quelques données structurées. Ce processus varie selon les données spécifiques qui vous intéressent. Dans cet exemple, vous allez extraire les noms et les prix des livres figurant sur la page d’accueil.
Commencez par inspecter la page d’accueil de books.toscrape.com
pour identifier les éléments HTML qui contiennent les noms des livres et les prix. Les noms des livres sont dans les balises <h3>
à l’intérieur de <article class= "product_pod">
, et les prix sont dans les balises <p class= "price_color">
à l’intérieur de ces mêmes balises <article>
.
Voici comment modifier le script pour extraire ces informations :
from playwright import sync_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
# Extract and print each book details in a loop
async def get_book_details(book):
# Extract and print book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
print(f'{book_name}: {book_price}')
# Use asyncio.gather() to execute all async calls concurrently
await asyncio.gather(*(get_book_details(book) for book in books))
await browser.close()
asyncio.run(main())
Lorsque vous exécutez ce script, vous pouvoir voir une liste de noms de livres s’afficher avec leur prix sur votre terminal. Cela devrait ressembler à ceci :
Il s’agit d’un exemple très simple ; quoi qu’il en soit, cela vous montre comment extraire des données structurées d’un site web à l’aide de Playwright et de Bright Data. Vous pouvez adapter ce script pour extraire différents types de données d’autres pages ou d’autres sites web.
Maintenant, allons plus loin et générons un fichier CSV contenant les données extraites.
Étape 8 : enregistrez les données extraites dans un fichier CSV
Pour enregistrer les données extraites dans un fichier CSV, vous devez importer le module csv
et créer un nouveau fichier CSV dans la fonction main()
. Ensuite, vous pouvez écrire les données extraites dans le fichier CSV avec la fonction get_book_details()
.
Ouvrez votre fichier main.py
et ajoutez le code suivant :
import asyncio
import csv
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
async def get_book_details(book):
# Extract book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
return book_name, book_price
# Use asyncio.gather() to execute all async calls concurrently
book_details = await asyncio.gather(*(get_book_details(book) for book in books))
# Write book details to a CSV file
with open('books.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Book Name', 'Price']) # Write header
writer.writerows(book_details) # Write book details
await browser.close()
asyncio.run(main())
Si vous exécutez ce script, vous verrez un nouveau fichier appelé books.csv
dans le répertoire de votre projet. Ouvrez ce fichier ; les données extraites apparaîtront au format CSV comme ceci :
Conclusion
Dans ce tutoriel, vous avez appris à utiliser Playwright et Bright Data pour extraire des données d’un site de commerce en ligne. Nous n’avons vu qu’un petit aperçu de ce que vous pouvez réaliser avec Playwright et le Scraping Browser de Bright Data, solution de navigation par proxy permettant de collecter des données sur des sites web qui utilisent des techniques avancées de détection antibot. Les principes de base abordés dans cet article peuvent être associés dans des flux de tâches plus avancés pour automatiser des activités telles que la correspondance de prix, les études de marché et la génération de prospects.
En arrière-plan, Bright Data utilise une infrastructure de proxys complète pour acheminer vos requêtes via un pool de millions d’adresses IP. Cela vous permet d’extraire des données de sites web sans vous faire bloquer ou interdire. Inscrivez-vous pour un essai gratuit et commencez vos premiers pas avec le Scraping Browser dès aujourd’hui !
Aucune carte de crédit requise
Vous ne voulez pas vous lancer dans le web scraping des sites de commerce en ligne, mais simplement obtenir des données ? Achetez des jeux de données pour le commerce en ligne.