Collecte de données
Filière: Ingénierie logicielle
AU: 2024/2025
Collecte de données
Sources de données
Les données sont essentielles pour prendre des décisions, développer des modèles
prédictifs et répondre à des questions complexes. Il existe deux principales sources de
données : les données d'entreprise et les données ouvertes, chacune ayant ses
caractéristiques et applications.
Collecte de données
Données d'entreprise
Ces données sont collectées en interne par des entreprises à partir de leurs opérations,
clients, ou systèmes. Elles sont précieuses pour analyser les performances et guider les
décisions stratégiques.
Caractéristiques :
• Collectées directement par les entreprises.
• Utilisées pour prendre des décisions basées sur des données concrètes.
• Généralement propriétaires et non accessibles au public.
Collecte de données
Exemple:
Une entreprise de commerce électronique collecte des données sur :
• Les commandes passées par les clients.
• Les comportements des utilisateurs sur le site web (par exemple, les pages visitées
ou les produits ajoutés au panier).
• Les performances des campagnes publicitaires.
Les entreprises utilisent ces informations pour :
• Optimiser leurs produits ou services.
• Identifier des tendances d'achat.
• Personnaliser les recommandations pour les utilisateurs.
Collecte de données
Open Data (Données ouvertes)
Les données ouvertes sont librement accessibles à tous. Elles peuvent être utilisées,
partagées, et améliorées sans restrictions importantes. Elles proviennent généralement
de gouvernements, d’organisations internationales, ou de projets collaboratifs.
Caractéristiques :
• Gratuitement accessibles au public.
• Peuvent être utilisées pour des recherches, projets éducatifs, ou initiatives
commerciales.
• Souvent disponibles dans des formats standardisés pour une utilisation facile.
Collecte de données
Parmi ces données, deux catégories principales émergent : les APIs de données publiques
(Public Data APIs) et les registres publics (Public Records).
APIs de données publiques
En utilisant des APIs, nous pouvons demander des données à des entreprises tierces via
Internet. De nombreuses entreprises proposent des APIs publiques permettant à quiconque
d'accéder à leurs données.
Quelques exemples d'APIs :
• API de données YouTube.
• API Graph Facebook.
• API Action MediaWiki (Wikipedia).
• API OpenWeather
• ...
Collecte de données
Registres publics
Les Registres publics (ou Public Records) sont des ensembles de données publiés par des
institutions gouvernementales, des organisations internationales ou des organismes
publics. Ces données sont souvent disponibles sous forme de fichiers téléchargeables ou
consultables en ligne.
Exemples courants :
• World Bank Data: Indicateurs économiques et sociaux mondiaux.
• Open Data France : Données ouvertes sur les statistiques et initiatives publiques.
• Recensements nationaux : Données démographiques publiées par les gouvernements.
• Agence météorologique : Archives climatiques et environnementales.
Collecte de données
Collecte de données
Les APIs (Application Programming Interfaces)
Définition
Une API (Interface de Programmation d'Applications) est un outil permettant à des
logiciels différents de communiquer entre eux via des requêtes et des réponses. Les
APIs sont utilisées pour récupérer ou envoyer des données à des serveurs distants,
souvent sous forme de fichiers JSON ou XML.
Collecte de données
Pourquoi utiliser une API ?
Les APIs offrent de nombreux avantages :
• Données dynamiques : Contrairement aux fichiers statiques comme CSV, les APIs
fournissent des données en temps réel, idéales pour des informations changeantes
(ex : prix des actions).
• Accès partiel : Elles permettent de récupérer uniquement les données pertinentes
dans un ensemble volumineux.
• Automatisation : Les APIs facilitent l'intégration dans des workflows automatisés.
Collecte de données
Fonctionnement d'une API
• Requête : Vous envoyez une requête HTTP au serveur via un endpoint (URL de
l'API).
• Réponse : Le serveur répond généralement en JSON, un format structuré facile à
manipuler.
Types de Requêtes HTTP
Les requêtes HTTP sont utilisées pour communiquer avec les serveurs et manipuler les
ressources qu'ils hébergent. Les principaux types de requêtes sont GET, POST, PUT et
DELETE.
Collecte de données
GET
La méthode GET est utilisée pour demander et récupérer des données d'un serveur.
Elle est non destructive, ce qui signifie qu'elle n'a pas d'effet sur les ressources
existantes.
Pour effectuer une requête GET, nous utilisons la fonction [Link]() qui nécessite,
dans la plupart des cas, un seul argument : l'URL vers laquelle la requête est envoyée.
Collecte de données
Exemple
Collecte de données
Les codes de statut sont retournés avec chaque requête envoyée à un serveur web. Ces
codes indiquent des informations sur le résultat de la requête.
Voici quelques codes pertinents pour les requêtes GET :
200 : Tout s'est bien passé, et le résultat a été retourné (s'il y en a un).
301 : Le serveur vous redirige vers un autre endpoint.
400 : Le serveur estime que la requête est mal formulée.
401 : Le serveur estime que vous n'êtes pas authentifié.
403 : La ressource à laquelle vous essayez d'accéder est interdite.
404 : La ressource que vous avez tenté d'accéder est introuvable sur le serveur.
503 : Le serveur n'est pas prêt à traiter la requête.
Collecte de données
POST
La méthode POST est utilisée pour envoyer des données au serveur afin de créer une
nouvelle ressource. Les données envoyées sont incluses dans le corps de la requête.
Exemple:
Collecte de données
Codes de statut courants pour POST :
• 201 Created : La ressource a été créée avec succès.
• 400 Bad Request : La requête est mal formulée ou contient des erreurs.
• 401 Unauthorized : L'utilisateur n'est pas authentifié.
• 500 Internal Server Error : Une erreur s'est produite sur le serveur.
Collecte de données
PUT
La méthode PUT est utilisée pour mettre à jour une ressource existante sur le serveur.
Elle remplace complètement les données de la ressource.
Exemple:
Collecte de données
Codes de statut courants pour PUT :
• 200 OK : La ressource a été mise à jour avec succès.
• 204 No Content : La mise à jour a réussi mais aucune donnée n'est retournée.
• 404 Not Found : La ressource à mettre à jour n'existe pas.
• 400 Bad Request : La requête est mal formulée.
Collecte de données
DELETE
La méthode DELETE est utilisée pour supprimer une ressource existante sur le serveur.
Collecte de données
Codes de statut courants pour DELETE :
200 OK : La ressource a été supprimée avec succès.
204 No Content : La ressource a été supprimée mais aucune donnée n'est retournée.
404 Not Found : La ressource à supprimer n'existe pas.
Collecte de données
Format JSON
La plupart des APIs renvoient leurs réponses sous forme de JSON. Python propose un
support pour ce format grâce au module intégré json. Ce module permet de convertir
des listes et des dictionnaires Python en JSON, et inversement, de transformer des
chaînes JSON en listes ou dictionnaires Python. Le module json offre deux fonctions
principales :
• [Link]() : convertit un objet Python en une chaîne JSON (dump).
• [Link]() : convertit une chaîne JSON en un objet Python (load).
Collecte de données
La fonction dumps() est particulièrement
utile, car elle permet de générer une
chaîne JSON formatée, rendant ainsi la
structure plus lisible et compréhensible.
Cela est particulièrement pratique pour
examiner les réponses des APIs.
Collecte de données
APIs bonnes pratiques
• Respecter les limites de requêtes : Consultez la documentation de l'API pour connaître les
limites de taux (rate limits) et évitez de dépasser ces quotas en mettant en place un système
de gestion des requêtes, comme des délais entre les appels.
• Gérer les erreurs efficacement : Implémentez des mécanismes pour détecter et traiter les
erreurs, comme les codes de statut HTTP (404, 500, etc.), et prévoyez des reprises
automatiques en cas de défaillance temporaire.
• Filtrer et paginer les données : Utilisez les paramètres de requête pour limiter les données
reçues à ce qui est strictement nécessaire (ex. : pagination, champs spécifiques) afin de réduire
la charge sur le serveur et d'optimiser les performances.
• Sécuriser les clés API : Ne partagez pas publiquement vos clés API et stockez-les de manière
sécurisée (ex. : dans des fichiers de configuration ou des variables d'environnement).
Renouvelez-les régulièrement pour éviter tout usage non autorisé.
Collecte de données
Web scraping
Définition
Le web scraping est un processus automatisé qui consiste à extraire des données d'un
site web en analysant son contenu HTML, souvent lorsque les données ne sont pas
accessibles via des moyens plus structurés comme des fichiers téléchargeables ou des
APIs.
Collecte de données
Le web scraping est-il légal ?
• La réponse à cette question n'est malheureusement pas simple ni universelle.
• Certains sites web autorisent explicitement le web scraping, en le mentionnant dans
leurs conditions d'utilisation. D'autres l'interdisent clairement.
• Enfin, de nombreux sites ne fournissent aucune directive explicite sur le sujet, laissant
une zone d'incertitude.
• Avant de scraper un site web, consultez ses conditions générales d'utilisation pour
vérifier si des règles spécifiques concernant le scraping y figurent. Si le site autorise ou
interdit explicitement le scraping, respectez ces directives. En l'absence d'indications
claires, la décision repose sur une analyse éthique et un jugement éclairé. Assurez-vous
que vos pratiques respectent les limites légales et morales.
Collecte de données
Bonnes pratiques pour le web scraping
Pour garantir une utilisation responsable et éthique du web scraping, il est important de
suivre certaines bonnes pratiques :
• Ne scrapez jamais plus fréquemment que nécessaire.
• Limitez vos requêtes au strict minimum pour éviter de surcharger inutilement les serveurs.
Utilisez le cache pour réduire les requêtes répétées.
• Stockez localement les contenus que vous scrapez afin de ne pas les télécharger plusieurs
fois. Cela réduit la charge sur les serveurs et améliore l'efficacité de votre code.
• Ajoutez des pauses dans votre script. Intégrez des délais avec des fonctions comme
[Link]() pour espacer les requêtes et éviter d'envoyer trop de demandes en peu de
temps. Cela minimise le risque d'être bloqué par des systèmes de sécurité ou de perturber
les performances du serveur.
Collecte de données
Comment fonctionne le web scraping ?
• Lorsque nous effectuons du web scraping, nous faisons essentiellement la même
chose qu'un navigateur web.
• Nous écrivons du code qui envoie une requête au serveur hébergeant la page
spécifiée. Le serveur renvoie alors le code source — principalement du HTML — de
la page (ou des pages) demandée(s).
Collecte de données
La bibliothèque Requests
La première étape pour effectuer du web scraping sur une page web consiste à
télécharger son contenu.
Les pages peuvent être téléchargées en utilisant la bibliothèque requests de Python.
Un code de statut 200 signifie que la page a été téléchargée avec succès.
Collecte de données
Pour améliorer les chances de succès du web scraping sans être bloqué par le serveur,
il est essentiel d'inclure des en-têtes (headers) dans la requête HTTP. Ces en-têtes
rendent la requête plus « humaine » en simulant un navigateur réel.
• User-Agent : Simule un navigateur réel en spécifiant quel navigateur et système
d'exploitation sont utilisés. Cela permet d'éviter que la requête soit bloquée comme
venant d'un bot.
• Accept-Language : Indique la langue préférée pour le contenu (par exemple, fr-FR
pour le français), ce qui peut influencer le contenu retourné.
• Accept : Définit le type de contenu attendu (par exemple, text/html pour du contenu
HTML), ce qui aide à obtenir une réponse appropriée.
• Referer : Peut être utilisé pour indiquer l'URL de la page précédente, ce qui peut
être important pour certains sites qui vérifient l'origine des requêtes.
Collecte de données
Exemple:
Nous pouvons afficher le contenu HTML de la page en utilisant la propriété content
Collecte de données
La structure d’une page HTML
Collecte de données
Les balises ont des noms couramment utilisés qui dépendent de leur position par
rapport aux autres balises :
• enfant — un enfant est une balise à l’intérieur d’une autre balise. Ainsi, les balises
<p> et <h1> ci-dessus sont toutes deux des enfants de la balise <body>.
• parent — un parent est la balise dans laquelle une autre balise se trouve. Ici, la
balise <html> est le parent de la balise <body>.
• frère/sœur — un frère ou une sœur est une balise qui est imbriquée sous le même
parent qu’une autre balise. Par exemple, <head> et <body> sont des frères et sœurs,
puisqu’ils sont tous deux à l’intérieur de la balise <html>. Les balises <p> et <h1>
sont également des sœurs, car elles sont toutes deux à l’intérieur de la balise
<body>. Nous pouvons également ajouter des propriétés aux balises HTML pour
modifier leur comportement.
Collecte de données
Parser une page avec BeautifulSoup
Nous pouvons utiliser la bibliothèque BeautifulSoup
pour analyser les documents et extraire le texte des
balises. Tout d'abord, il est nécessaire d'importer la
bibliothèque et de créer une instance de la classe
BeautifulSoup pour analyser notre document.
Nous pouvons afficher le contenu HTML de la page,
formaté de manière lisible, en utilisant la méthode
prettify sur l'objet BeautifulSoup.
Collecte de données
Nous pouvons sélectionner tous les éléments au
niveau supérieur de la page en utilisant la propriété
children de l'objet soup. Notez que children retourne
un générateur de liste, donc nous devons appeler la
fonction list() dessus.
Collecte de données
Chaque élément analysé dans un document HTML est représenté par un objet
spécifique. Ces objets permettent de manipuler et d'extraire facilement des données à
partir du HTML. Voici les trois principaux types d'objets que vous pouvez rencontrer :
• Objet Doctype: contient des informations sur le type du document.
• Objet NavigableString: représente le texte trouvé dans le document HTML.
• Objet Tag : représente une balise HTML. Il contient à la fois le nom de la balise
(comme <p>, <a>, etc.) et ses attributs, ainsi que les autres balises imbriquées à
l'intérieur.
Collecte de données
Pour récupérer les enfants à l'intérieur de la balise <html>, nous utilisons :
Collecte de données
Trouver toutes les instances d'une balise en
une fois
Si nous voulons extraire toutes les instances
d'une balise sur une page, nous pouvons
utiliser la méthode find_all, qui permet de
trouver toutes les occurrences d'une balise
spécifique.
Note : find_all renvoie une liste, donc il
faudra parcourir cette liste (par exemple avec
une boucle)
Collecte de données
Vous pouvez également utiliser l'indexation de liste pour extraire du texte avec la
méthode find_all().
Si vous souhaitez seulement la première instance d'une balise, vous pouvez utiliser la
méthode find. Elle renvoie le premier élément trouvé correspondant à la balise.
Collecte de données
Recherche de balises par classe
Vous pouvez utiliser la méthode find_all pour rechercher des éléments par classe en
utilisant l’argument class_.
Collecte de données
Recherche de balises par Id
Vous pouvez utiliser la méthode
find_all pour rechercher des éléments
par id en utilisant l’argument id.
Collecte de données
Recherche de balises en utilisant des sélecteurs CSS
Nous pouvons également rechercher des éléments en utilisant des sélecteurs CSS. Ces
sélecteurs sont la manière dont le langage CSS permet aux développeurs de spécifier les
balises HTML à styliser. Voici quelques exemples :
p a : Trouve toutes les balises <a> à l'intérieur d'une balise <p>.
body p a : Trouve toutes les balises <a> à l'intérieur d'une balise <p>, elle-même à
l'intérieur d'une balise <body>.
html body : Trouve toutes les balises <body> à l'intérieur d'une balise <html>.
[Link]-text : Trouve toutes les balises <p> ayant la classe outer-text.
p#first : Trouve toutes les balises <p> ayant l'ID first.
body [Link]-text : Trouve toutes les balises <p> avec la classe outer-text à l'intérieur
d'une balise <body>.
Collecte de données
Exemple:
Collecte de données
Défits du web scraping
• Pages avec des designs différents : Certains sites utilisent plusieurs modèles de
conception pour différentes sections (par exemple, une page d'accueil différente des
pages de produits ou des articles). Cela oblige à adapter le scraping à chaque type de
page.
• Mises à jour fréquentes : Les sites web évoluent souvent, et les structures HTML
peuvent être modifiées même pour les pages déjà existantes. Cela peut casser les
scripts de scraping.
• Limitations techniques (CAPTCHA, restrictions IP) : Certains sites utilisent des
protections comme les CAPTCHAs ou limitent les requêtes provenant de la même
adresse IP, rendant le scraping difficile.
• Aspects légaux et éthiques : Scraper des données sans autorisation explicite peut violer
les conditions d'utilisation d'un site ou même la loi dans certaines juridictions.