Initiation au Web Scraping

Introduction
Le web scraping consiste à collecter automatiquement les données présentent sur les sites web.
Les objectifs visés sont variés :
-
Une entreprise de commerce électronique peut, par exemple, utiliser le web scraping pour comparer les prix pratiqués chez la concurrence, collecter les avis de clients ou la description de produits pour affiner sa stratégie commerciale
-
une plateforme peut faire appel au web scraping pour faire profiter ses clients des “bons plans” du moment sur le web, des nouvelles tendances, de l’évolution du prix d’articles sur plusieurs périodes …
-
une entreprise de cybersécurité peut utiliser le web scraping pour surveiller les menaces sur le web
-
…
Cadre législatif
Le web scrapping n’est techniquement pas illicite. Cependant, la façon dont sont collectées ou utilisées les données peuvent enfreindre certaines lois. Il convient donc de bien se renseigner sur ce qu’il est possible de faire ou de ne pas faire.
Parmi les activités de web scraping susceptibles d’enfreindre des lois ou des règlements, on peut citer :
-
Le téléchargement de données si les conditions générales d’utilisation du site (→ CGU) interdisent spécifiquement la collecte automatisée de données.
-
La collecte de données personnelles ou des informations sensibles sans consentement.
-
Le scraping de contenu protégé par des droits d’auteur ou propriétaire sans consentement explicite.
-
Le scraping des données à partir de zones restreintes ou privées d’un site web.
-
La revente ou distribution des données récupérées.
-
La collecte de données à des fins discriminatoires, contraires à l’éthique, ou malveillantes (spam, phishing)
-
Le scraping non autorisé de sites web ou de bases de données gouvernementales.
(Source : Tester, P. (s.d.). Le web scraping est-il illégal ? DataDome. https://datadome.co/fr/guides-fr/scraping-fr/le-web-scraping-est-il-illegal/)
Parades au web scraping
Pour se prémunir du web scraping différentes techniques existent :
-
Authentification systématique pour accéder au site
-
CAPTCHA
-
Limitation du trafic pour empêcher les requêtes trop rapprochées dans le temps
-
Génération dynamique du contenu via Javascript par exemple
-
Inderdiction explicite dans les CGU (Conditions Générale d’Utilisation) du site
-
…
Il existe également une sorte de standard qui permet — non pas d’interdire le web scraping — mais d’indiquer ce qu’il est possible de scraper ou pas.
Ce standard repose sur la mise en place d’un fichier robots.txt à la racine du site.
Les scrapers sont alors tenus, mais pas obligés, de suivre les règles contenues dans ce fichier.
robots.txt# Interdit l'accès à Yandex et DuckDuckGo
User-agent: Yandex
Disallow: /
User-agent: DuckDuckGo
Disallow: /
# Autorise tous les autres robots d'indexation à parcourir l'intégralité du site ...
User-agent: *
Allow: /
# ...sauf aux répertoires /private/ et /assets/
Disallow: /private/
Disallow: /assets/
✎ Travail n° 1
🎯 Travail à faire :
-
Reproduire le fichier
robots.txtdu site Root Me dans le compte rendu et l’analyser -
Expliquer chacune de ses lignes en s’aidant d’internet
Requêtes HTTP avec Python
Pour pouvoir extraire les données de sites Web, il va falloir se rendre dessus grâce à son URL (→ Uniform Resource Locator).
Python dispose à cet usage du module urllib.request pour ouvrir et lire des URLs.
Cependant, le module tierce requests est souvent considéré comme plus facile à prendre en main ⇒ c’est donc celui que vous utiliserez dans cette partie de l’activité.
💻 Travail n° 2 Récupérer une page web avec requests
🎯 Travail à faire :
-
Créer et activer un nouvel environnement virtuel Python.
-
Dans un environnement Anaconda/Conda sous Windows :
-
Lancer une console Anaconda (→ saisir Anaconda Prompt ou Anaconda Powershell Prompt dans le menu “Démarrer”)
-
…puis saisir les commandes :
conda create -n web-scraping python conda activate web-scraping
-
-
Sous Linux
python3 -m venv web-scraping source ./web-scraping/bin/activate
-
-
Installer le module
requestsdans le nouvel environnement virtuel créé à l’étape précédente :-
Sous Windows/Anaconda :
conda install requests -
Sous Linux :
pip install requests
-
-
Saisir et exécuter le script suivant :
import requests # Exécuter une requête HTTP GET sur le site https://httpbin.org # ...et stocker le code de statut de réponse HTTP dans `response` response = requests.get("https://httpbin.org" # SI statut == OK ALORS if response.status_code == 200: # Afficher le statut et le contenu de la page web retournés print(f"ℹ️ statut : {response.status_code}\n📖HTML :\n{response.text}") # SINON else: # Afficher le code d'erreur print(f"Erreur lors de la requête : {response.status_code}")
Vous êtes maintenant capable de récupérer le contenu HTML d’une page web. Ne reste plus qu’à en extraire les parties intéressantes.
Analyse du contenu avec BeautifulSoup
Le module Python BeautifulSoup va considérablement faciliter l’extraction du contenu d’une page web.
Ce module permet effectivement non seulement d’analyser le contenu d’une page web pour reconstruire sa structure qu’on appelle le DOM (Document Object Model) mais aussi d’en extraire certaines parties à l’aide de sélecteurs.
le DOM est une structure de données arborescente qui est élaborée dans la mémoire du navigateur web lorsqu’il charge une page HTML. Toute modification de ce DOM via du code Javascript par exemple est alors immédiatement reflété à l’écran par le navigateur.
Exemple : changer l’attribut src d’un nœud correspondant à une balise <img> dans le HTML pour le faire pointer sur un autre fichier image affichera cette nouvelle image.
💻 Travail n° 3 Prise en main de BeautifulSoup
🎯 Travail à faire :
-
Toujours dans le même environnement virtuel Python créé pour l’activité, installer le module
BeautifulSoup-
Sous Windows/Anaconda :
conda install beautifulsoup4 (1)1 ⚠️Ne pas oublier le ‘4’ à la fin du nom de module -
Sous Linux :
pip install beautifulsoup41 ⚠️Ne pas oublier le ‘4’ à la fin du nom de module
-
-
Prendre connaissance du document Analyser le contenu d’une page web avec BeautifulSoup
-
À partir de ce vous avez appris, coder un script qui :
-
Affiche “proprement” le contenu HTML de la Page d’accueil de ce site
avec la méthode
prettifydeBeautifulSoup -
Affiche d’abord l’intégralité de la balise responsable de l’affichage de la 1ère image de la page web puis uniquement son type et fianlement le contenu de son attribut
src.Exemple de résultat attendu :Balise: <img alt="Logo LAB" class="navbar-image hide-for-print" src="../static/img/logo-lab-round.png"/> Type : img Attribut `src` : ../static/img/logo-lab-round.png -
Affiche tous les liens externes présents sur la page
La lecture du paragraphe The keyword arguments
dans la documentation de
BeautifulSouppeut s’avérer utile pour n’afficher que les liens externes.Exemple de résultat attendu :Lien : https://www.atrium-sud.fr/web/lpo-lyc-metier-alphonse-benoit-848031/accueil | Texte : lycée Alphonse Benoit de l’Isle-sur-la-Sorgue (84800) Lien : https://antora.org/ | Texte : Antora
-
🞄 🞄 🞄