Une bonne compréhension d’Internet nécessite de nombreuses connaissances. Passons en revue une brève introduction à tous les termes dont vous avez besoin pour mieux comprendre le web scraping.
Le protocole HTTP (HyperText Transfer Protocol) est à la base de tout échange de données sur le Web. Comme son nom l'indique, HTTP est un protocole client-serveur. Un client HTTP, tel qu'un navigateur Web, établit une connexion avec un serveur HTTP et envoie un message, par exemple : « Salut ! Ça va ? Tu peux me passer ces images ? ». Le serveur renvoie généralement une réponse, sous forme de code HTML, puis ferme la connexion.
Imaginons que vous deviez vous rendre sur Google. Si vous saisissez l'adresse dans le navigateur web et appuyez sur Entrée, le client HTTP (le navigateur) enverra le message suivant au serveur :
GET / HTTP/1.1
Host: google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web\p,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
La première ligne du message contient la méthode de requête (GET), le chemin vers lequel nous avons envoyé la requête (dans notre cas, il s'agit simplement de « / » car nous avons uniquement accédé à www.google.com), la version du protocole HTTP, ainsi que plusieurs en-têtes, comme Connection ou User-Agent.
Parlons des champs d'en-tête les plus importants pour le processus :
- Host : le nom de domaine du serveur auquel vous avez accédé après avoir saisi l'adresse dans le navigateur Web et appuyé sur Entrée.
- User-Agent : ici, nous pouvons voir des détails concernant le client qui a effectué la requête. J'utilise un MacBook, comme vous pouvez le voir dans la partie __(Macintosh; Intel Mac OS X 10_11_6)__, et Chrome comme navigateur web __(Chrome/56.0.2924.87)__.
- Accept : en utilisant cet en-tête, le client impose au serveur de ne lui envoyer que certains types de réponses, comme application/JSON ou text/plain.
- Referrer : Ce champ d'en-tête contient l'adresse de la page à l'origine de la requête. Les sites web utilisent cet en-tête pour adapter leur contenu en fonction de la provenance de l'utilisateur.
Une réponse du serveur peut ressembler à ceci :
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu) Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>The content of the document</body>
</html>
Comme vous pouvez le voir, la première ligne contient le code de réponse HTTP : **200 OK. Cela signifie que l'action de scraping a réussi.
Maintenant, si nous avions envoyé la requête à l'aide d'un navigateur web, celui-ci aurait analysé le code HTML, récupéré tous les autres éléments tels que les fichiers CSS, JavaScript et les images, puis affiché la version finale de la page web. Dans les étapes ci-dessous, nous allons essayer d'automatiser ce processus.