0% ont trouvé ce document utile (0 vote)
5 vues66 pages

Introduction au Web Scraping

Le document présente le concept de web scraping, qui consiste à extraire des données de sites web, souvent en association avec le web crawling. Il aborde les raisons de faire du scraping, les méthodes pour obtenir des pages web, et les éléments techniques comme les requêtes HTTP et le langage HTML. Enfin, il mentionne des outils comme BeautifulSoup pour faciliter le processus d'extraction des données.

Transféré par

saidjedemou
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues66 pages

Introduction au Web Scraping

Le document présente le concept de web scraping, qui consiste à extraire des données de sites web, souvent en association avec le web crawling. Il aborde les raisons de faire du scraping, les méthodes pour obtenir des pages web, et les éléments techniques comme les requêtes HTTP et le langage HTML. Enfin, il mentionne des outils comme BeautifulSoup pour faciliter le processus d'extraction des données.

Transféré par

saidjedemou
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Scraping

Julien Romero

CSC 4538 Scrapping 1


Introduction

CSC 4538 Scrapping 2


Qu’est-ce que le scrapping ?
● Le (web) scraping est un ensemble de techniques permettant d’extraire des
données de sites webs
● Souvent associé au web crawling qui parcours les pages du web de manière
automatique

CSC 4538 Scrapping 3


Pourquoi faire du scraping ?
● Référencement : construction d’un moteur de recherche
● Extraction d’informations spécifiques
○ Comparateur de prix (billets d’avions, objets)
○ Agrégation d’évaluations de produits
○ Détection de changement dans un site web
○ Évaluation des tendances
○ Suivi de la présence en ligne
○ Détection de menaces
● Construction ou augmentation de jeu de données
● Test automatique de site web

CSC 4538 Scrapping 4


Comment faire du scrapping ?
● Il est important de comprendre le fonctionnement du web et des différents
composants
● Il faut “reverse-engineer” le site scrappé pour comprendre comment extraire au
mieux l’information

CSC 4538 Scrapping 5


HTTP

CSC 4538 Scrapping 6


Comment obtenir une page web ?

Réseau

Ordinateur Serveur

CSC 4538 Scrapping 7


Comment obtenir une page web ?

URL

Réseau

Ordinateur Serveur

CSC 4538 Scrapping 8


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Schéma = protocole, en général http ou https, mais aussi ftp, mailto, irc, …

CSC 4538 Scrapping 9


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Infos utilisateur : possibilité de mettre un nom d’utilisateur et un mot de passe

CSC 4538 Scrapping 10


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Hôte : nom de domaine ou adresse IP permettant d’identifier la destination


○ Les noms de domaines sont transformées en IP par le DNS
○ [Link]

CSC 4538 Scrapping 11


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Port : on peut indiquer le port de connexion


○ Par défaut, 80 pour HTTP, 443 pour HTTPS

CSC 4538 Scrapping 12


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Chemin : chemin absolu vers la ressource sur le serveur


○ Comme dans UNIX
○ [Link]

CSC 4538 Scrapping 13


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Requête : Permet de passer des arguments ou données supplémentaires


○ Arguments souvent séparés par un délimiteur (&)
○ [Link]
ue&soluce=true

CSC 4538 Scrapping 14


URL
● URL = Uniform Resource Locator
○ Sert à localiser une ressource dans un réseau
● Cas spécifique d’une URI = Uniform Resource Identifier

● Ancre : donnée supplémentaire utilisée une fois la réponse obtenue


○ Souvent un nom de section à laquelle se déplacer

CSC 4538 Scrapping 15


Comment obtenir une page web ?

URL

Réseau

Ordinateur Serveur

CSC 4538 Scrapping 16


Comment obtenir une page web ?

HTTP Request

Réseau

Ordinateur Serveur

CSC 4538 Scrapping 17


HTTP, le protocole du World Wide Web
● HTTP = Hypertext Transfer Protocol
● Protocole de communication client-serveur en mode request-response et sans état
● Pourquoi a-t-on besoin d’un protocole ?
○ Optimisation des requêtes (cache)
○ Ajout de fonctionnalités (authentification, session)
○ Donner des tailles sur la réponse attendue
○ Distribution du traffic

CSC 4538 Scrapping 18


Messages HTTP
● Trois composantes
○ La requête / le statut de la réponse
○ Un header (optionnel)
○ Un body (optionnel)

CSC 4538 Scrapping 19


La requête HTTP
● Une ligne indiquant ce que l’on demande de la forme

Méthode URL Protocole

● Le protocole est HTTP avec un numéro de version (HTTP/1.1 par exemple)


● La méthode indique l’action de l’on veut exécuter sur la ressource.
● Principales méthodes :
○ GET : On veut obtenir la ressource
○ POST : On envoie de l’information au serveur (message forum, formulaire)
○ PUT, DELETE, …

GET [Link] HTTP/1.1

CSC 4538 Scrapping 20


Le statut de la réponse HTTP
● De la forme :

Protocole CodeStatut Message

● Le code du statut est dans cinq catégories :


○ 1XX : informatif
○ 2XX : succès
○ 3XX : redirection
○ 4XX : erreur client
○ 5XX : erreur serveur
● En général, 200 et tout va bien

CSC 4538 Scrapping 21


Le header
● Ensemble de clefs-valeurs de la forme
Clef: valeur
● Clefs populaires :
○ Accept : Le type de ressource attendue (Accept: text/html)
■ Content-Type dans la réponse
○ Accept-Encoding : L’encoding de la réponse (Accept-Encoding: gzip, deflate)
■ Content-Encoding dans la réponse
○ Accept-Language : La langue de la réponse (Accept-Language: en-US)
○ Authorization : Authentication (Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==)
○ Cookie : Un cookie (Cookie: $Version=1; Skin=new;)
○ Host : Le nom de domaine (Host: [Link])
○ User-Agent : Qui demande la ressource (User-Agent: Mozilla/5.0 (X11; Linux x86_64;
rv:12.0) Gecko/20100101 Firefox/12.0)

CSC 4538 Scrapping 22


Le body
● En général, le HTML ou le format demandé
○ Peut être compressé
● Les informations du POST

CSC 4538 Scrapping 23


Comment obtenir une page web ?

HTTP Request

Réseau

HTTP Response

Ordinateur Serveur

CSC 4538 Scrapping 24


Visualiser les requêtes
Dans la plupart des
navigateurs, on peut accéder
au trafic réseau et visualiser
les requêtes

CSC 4538 Scrapping 25


Fonctionnement des sites webs en pratique

CSC 4538 Scrapping 26


Une page web a besoin de nombreuses ressources
● En général, une page web a besoin de charger de nombreuses ressources
○ Du HTML
○ Des images
○ Des scripts en Javascript
○ Des vidéos
○ Des données
○ Des polices d’écriture
○ Du tracking
● Exemple : Ouvrez un site comme [Link] et regarder la quantité de ressources
nécessaires à travers la console de réseau

CSC 4538 Scrapping 27


La réalité

Réseau

Ordinateur Serveurs
(potentiellement
plusieurs)

CSC 4538 Scrapping 28


HTML
● HTML est un langage de balisage
○ On va annoter le contenu pour leur donner des propriétés
○ On a une structure d’arbre = des balises peuvent contenir d’autre balises
● Syntaxe d’une balise
<tag attribut1="valeur1" attribut2="valeur2">contenu</tag>

● Le tag défini le type de balise


● Les attributs donnent des propriétés à la zone balisée

CSC 4538 Scrapping 29


HTML - Tags classiques
● <p> : Paragraphe
● <div> : Division/section de code. Utilisé pour organiser et isoler des parties.
● <head> : Définit une zone de métadonnées
● <a> : Lien hypertexte
● <input> : Champ de texte
● <h1>, <h2>, <h3>, … : Titre de taille 1, 2, 3, …
● <img> : Image
● <ul>, <ol>, <li> : Listes
● <table>, <th>, <td>, <tr>, <thead>, <tbody> : tableaux

CSC 4538 Scrapping 30


HTML - Attributs classiques
● href : lien dans une balise <a>
● src : lien d’une image dans <img>
● class : utilisé pour identifier l’application d’un élément de style ou d’un script
Javascript
● id : pareil que class, mais identifiant unique
● label : titre pour l’identification par les humains

Les attributs et leur utilisation peuvent grandement varier d’un site à l’autre.

CSC 4538 Scrapping 31


HTML en pratique pour le scrapping
● Il n’est pas nécessaire de connaître tous les tags et attributs possibles
○ Il faut être conscient de la structure imbriquée d’arbre
○ Il faut pouvoir lire et comprendre du HTML
● Nous utiliserons les tags et les attributs pour trouver de manière systématique des
éléments dans la page
● Il est possible d’accéder au HTML d’une page grâce au navigateur
○ Soit en affichant le code source directement
○ Soit en utilisant l’outil inspecter qui permet un mode interactif pour l’exploration

CSC 4538 Scrapping 32


Exemple

CSC 4538 Scrapping 33


BeautifulSoup
from bs4 import BeautifulSoup

soup = BeautifulSoup(open("scrapping_example.html"), '[Link]')

# Un seul élément h1, facile

soup.find_all('h1')[0].getText()

# PSG – Toulouse : Une célébration fastueuse mais un réel malaise sur le cas Mbappé

CSC 4538 Scrapping 34


Exemple

CSC 4538 Scrapping 35


BeautifulSoup
Plus compliqué, de nombreux tags <span>
len(soup.find_all('span'))

# 217

Si on a de la chance, notre span est toujours au même endroit. Sinon, il faut l’identifier
de manière unique, soit grâce à ces attributs, soit dans l’arborescence.
soup = BeautifulSoup(open("scrapping_example.html"), '[Link]')

len(soup.find_all('span', {"class": "font-source-serif-pro text-xxl@xs"}))

# 1

CSC 4538 Scrapping 36


BeautifulSoup
Plus compliqué, de nombreux tags <span>
len(soup.find_all('span'))

# 217

Si on a de la chance, notre span est toujours au même endroit. Sinon, il faut l’identifier
de manière unique, soit grâce à ces attributs, soit dans l’arborescence.
for div in soup.find_all("div"):
if [Link]() is not None and [Link]().name == "h1":
print(div.find_all("span")[-1].getText())

# La fête pour le 12e titre de champion

CSC 4538 Scrapping 37


Les images, vidéo
● Chaque image a aussi une URL associée
● On peut constituer des jeux de données en utilisant l’image et les attributs pour
une description (alt)
○ Parfois, le texte autour peut servir
● Souvent difficile ou cher d’exploiter l’information dans une image, encore pire
pour une vidéo

CSC 4538 Scrapping 38


Javascript
● Javascript est un langage de script très utilisé sur le web
● Ce qui nous intéresse :
○ Javascript rend le pages dynamiques
○ Javascript peut télécharger des données et les insérer dans la page
○ Javascript peut effectuer des opérations à la volée
● Les scripts sont en clair sur notre machine et sont téléchargés comme toutes les
ressources. Par contre, ils sont souvent “compressé”, voire obfusqués pour réduire
la taille de scripts et cacher leur contenu.
○ Exploitation directe très compliquée

CSC 4538 Scrapping 39


Exemple de page dynamique - Twitter/X
Presque aucun texte dans le code source !

<!DOCTYPE html><html dir="ltr" lang="fr"><head>


[Contenu header métadonnées/chargement de scripts]
</head><body style="background-color: #FFFFFF;"><noscript><style>
[Éléments de style]
</style>
<div class="errorContainer">
[message d'erreur si Javascript n'est pas disponible]
</div></noscript>
[Plein de div vides pour plus tard]
[Une image SVG]
[Appels de scripts]

CSC 4538 Scrapping 40


Que faire dans ce cas ?
● Il va falloir comprendre les informations échangées en regardant les
communications réseau

CSC 4538 Scrapping 41


La chaine météo - HTML source
<span class="tt-day">lun</span>
<span class="tt-day-num">13</span>

<h2 class="tt-img">
<img
width="57"
height="61"

src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjC
B0C8AAAAASUVORK5CYII="
alt="Prévisions à 15 jours"
/>
</h2>
<span class="tt-tempe-max">-</span>
<span class="tt-tempe-min">-</span>

Pas de température !

CSC 4538 Scrapping 42


Communications
Il semble y avoir une requête par jour qui retourne un JSON

CSC 4538 Scrapping 43


Détails de la requête
Il semble n’y avoir qu’un seul champs dans la requête (la date), mais il faut l’identifiant
de la ville (101-12176)

CSC 4538 Scrapping 44


Comment obtenir l’identifiant de la ville

CSC 4538 Scrapping 45


L’API de l’autocomplétion
Les appels à l’API de l’autocomplétion retournent un identifiant que l’on peut utiliser
pour avoir accès à l’identifiant

CSC 4538 Scrapping 46


L’API de l’autocomplétion
Un seul champ : la requête

CSC 4538 Scrapping 47


Plan d’action
Entrée : Le nom de la ville, une date

1. Utiliser l’autocomplétion pour obtenir l’identifiant de la ville


2. Obtenir la météo en utilisant la requête idoine

CSC 4538 Scrapping 48


En Python
import json
import [Link]
from [Link] import quote, urlencode

URL_AUTOCOMPLETE = "[Link]
URL_METEO = "[Link]

def get_id(city):
url = URL_AUTOCOMPLETE + quote(city)
with [Link](url) as response:
id_temp = list([Link]([Link]().decode("utf-8")).keys())[0].split("_")
return id_temp[1] + "-" + id_temp[0]

CSC 4538 Scrapping 49


En Python
def get_meteo(city, date):
id_city = get_id(city)
url = URL_METEO + id_city + "?" + urlencode({"d": date})
print(url)
with [Link](url) as response:
data = [Link]([Link]().decode("utf-8"))
return data["picto_label"], data["wind_speed"], data["tempe_min"], data["tempe_max"]

if __name__ == '__main__':
print(get_meteo("evry", "2024-05-17"))

CSC 4538 Scrapping 50


Mécanismes de protection contre le scrapping

CSC 4538 Scrapping 51


Le bon et le moins bon
Compromis entre :

● Expérience utilisateur et facilité d’accès pour les moteurs de recherche


● Prévention du scrapping non voulu

CSC 4538 Scrapping 52


Ralentir le scrapping
● Limiter le nombre d’accès par IP
○ Problème pour les réseaux publiques, les IPs non fixes, les VPNs
○ Parfois, beaucoup de requêtes même pour un utilisateur normal
● Captcha
○ Dur à mettre en place sur des appels à une API
● Détection d’activité inhabituelle
○ Difficile à mettre en place
○ Besoin de suivre plein de métriques et de les traiter (temps de remplissage formulaire, taille écran, polices
installées, nombre de clicks par minute, …)
● Forcer l’identification
○ Mauvais pour les moteurs de recherches et les utilisateurs anonymes
● Contrôler au maximum les informations accessibles
○ Pas trop d’informations d’un coup
● Donner l’information sous forme d’image
○ Pénible pour les vrais utilisateurs

CSC 4538 Scrapping 53


Ralentir le scrapping
● Contrôler le User-Agent
○ Facile à contourner
● Faire un mécanisme compliqué de contrôle d’accès
○ Génération de tokens d’authentification
○ Script Javascript difficile à lire
○ Une fois découvert et inversé, mécanisme inutile

CSC 4538 Scrapping 54


Comment contourner sans effort ?
● Rendu de la page et exécution des scripts dans un navigateur contrôlé
○ En Python : Selenium
● Presque indétectable : on utilise le même outil qu’un humain
● Par contre, très lent !
● Possibilité d’interagir avec le site :
○ Click souris, clavier
● Souvent utilisé pour faire des tests automatiques de sites web

CSC 4538 Scrapping 55


Exemple
import time

from selenium import webdriver


from selenium .webdriver .[Link] import By

if __name__ == '__main__ ':


driver = webdriver .Chrome()
driver .get("[Link] ")
time .sleep(2)
login_form = driver.find_element ([Link],
'/html/body/div[1]/div/div/div[2]/main/div/div/div/div[ '
'1]/div/section/div/div/div[1]/div/div/article/div/div/div[3]/div[ '
'1]/div/div/span ')
print(login_form .text)

CSC 4538 Scrapping 56


Exemple

CSC 4538 Scrapping 57


Considérations utiles

CSC 4538 Scrapping 58


Comment obtenir toutes les pages webs d’un site ?
● Web crawling
○ On part d’une page racine et on suit tous les liens récursivement
○ Fait par les moteurs de recherche
○ Mais toutes les pages ne sont pas accessibles par un lien (exemple : champ de recherche)

CSC 4538 Scrapping 59


[Link]
● Fichier souvent placé à la racine d’un site web
○ Exemple : [Link]
● Décrit les pages autorisées ou non pour les robots crawler de site web
● Donne parfois une idée de pages intéressantes à considérer (ex. Le sitemap)

CSC 4538 Scrapping 60


Le sitemap
● Souvent un ou plusieurs fichiers XML [Link] à la racine d’un site
○ Exemple : [Link]
○ Trouvé dans le [Link]
○ Ou parfois avec une recherche Google : site:[Link] filetype:xml
● Contient une liste de pages de site
○ Ou redirection vers d’autres sitemaps
○ Exemple : [Link]
● À télécharger une seule fois

CSC 4538 Scrapping 61


Exemple identifiant
ville

On peut éviter un appel à


l’autocomplétion !

CSC 4538 Scrapping 62


Les archives du web
● Les archives du web peuvent contenir des pages difficilement accessibles (ou
même n’existant plus)
● [Link]
● Site très lent

CSC 4538 Scrapping 63


Les archives du web
● Possibilité de rechercher des URLs par préfixe, ou même d’avoir accès à un
sitemap

CSC 4538 Scrapping 64


Aspects légaux
● Scrapping légal en général
○ Mais peut être contraire aux conditions générales d’utilisation du site
● Par contre, l’utilisation des données peut être contrôlée ou illégale
○ Le droit d’auteur est toujours présent
○ Les données personnelles très encadrées par la RGPD en Europe
● CNIL :
[Link]
ne-des-fins-de-demarchage-commercial
● En cas de doute, demander à un avocat

CSC 4538 Scrapping 65


En route vers le TP

CSC 4538 Scrapping 66

Vous aimerez peut-être aussi