{"word_count": 1864, "character_count": 13093}
La collecte automatisée de données sur le web consiste à ordonner à un programme d&#8217;aller sélectionner des informations bien précises dans une série de pages. Ce billet est une brève introduction à la structure du langage HTML, dans lequel ces pages sont écrites. On aborde les pages simples (la grande majorité d&#8217;entre elles), et on abordera plus tard les les pages plus complexes, ainsi que les évolutions contemporaines du langage.Quel rapport entre un navigateur et le HTML ?Des visualisateurs de code HTMLQue se passe-t-il quand on utilise le web, par exemple quand vous venez visiter la page de ce billet ? Vous utilisez un navigateur, vous tapez l&#8217;adresse de la page, vous pressez entrée ; et après ?L&#8217;adresse est celle d&#8217;un serveur, un ordinateur allumé tout le temps, et appuyer sur entrée revient à lui demander une page particulière. Le serveur nous renvoie alors la page demandée sous forme d&#8217;un fichier écrit en HTML : il s&#8217;agit d&#8217;un langage informatique simple, qu&#8217;on va préciser dans une seconde[1].Votre navigateur reçoit ensuite ce fichier HTML, qu&#8217;on appelle le code source de la page et le transforme en une page mise sous une forme lisible et graphique, que vous avez sous les yeux.Le langage HTML est donc une manière de décrire des instructions typographiques pour les pages du web. Il s&#8217;est imposé grâce à sa relative simplicité d&#8217;écriture et d&#8217;interprétation (pour les concepteurs de navigateurs).Comme la collecte automatisée de données sur internet consiste souvent à demander à un programme de récupérer des informations dans une série de pages web, c'est-à-dire dans des pages écrites en HTML, il nous faut savoir comment désigner dans ce langage les informations qui nous intéressent.Tout ce qui apparaît régulier dans le navigateur, doit être régulier dans le code sourceUn principe fondamental de la collecte automatisée de données est ainsi le suivant : si on observe une certaine régularité formelle sur une page web affichée par un navigateur, alors celle-ci doit exister dans le code source de la page. Dans l&#8217;imprimerie de système Gutenberg, si on voit des lignes (de texte), c&#8217;est que l&#8217;imprimeur a utilisé des outils pour créer des lignes (des suites de caractères métalliques de même hauteur). Ici, si on voit à l&#8217;écran des blocs de texte similaires alors, comme le navigateur ne fait que traduire visuellement le code source, on doit très probablement trouver des instructions similaires qui correspondent à ces blocs de texte dans le code source.La structure du langageLes balises HTMLLe HTML est un langage assez facile d&#8217;accès. Son nom est explicite, HyperText Markup Language : HyperText signifie qu&#8217;il y a des liens cliquables, et Markup signifie « balises ». C&#8217;est donc un langage de balises (avec des liens cliquables). Le point principal est donc de comprendre la notion de balises et l&#8217;usage qu&#8217;il y en est fait.Une structure en arbreLes balises sont de la forme suivante :&#60;typeBalise&#62;    Contenu&#60;/typeBalise&#62;Trois éléments sont présents : un couple de balises ouvrante et fermante, leur type, et un contenu entre les deux. Ce contenu peut être du simple texte, mais aussi d&#8217;autres balises. Ainsi une page HTML a toujours une structure de la forme suivante :&#60;tronc&#62;    &#60;branche&#62;        &#60;sousBranche&#62;            contenu_1.1        &#60;/sousBranche&#62;        &#60;sousBranche&#62;            contenu_1.2        &#60;/sousBranche&#62;    &#60;/branche&#62;    &#60;branche&#62;        contenu_2    &#60;/branche&#62;&#60;/tronc&#62;C&#8217;est donc une structure en arbre, exactement comme un texte avec des parties et des sous-parties &#8211; à la différence que celles-ci peuvent être de plusieurs types : pour poursuivre l&#8217;analogie, comme dans les textes de philosophie analytique ou de mathématiques, texte principal, scolie, lemme, démonstration, figues, etc.En HTML, les balises peuvent être d&#8217;un ensemble limité de types, qui correspondent à des instructions typographiques : div = bloc, a = lien, etc. ; &#60;tronc&#62;, &#60;branche&#62;, &#60;sousBranche&#62; et &#60;typeBalise&#62; n&#8217;existent pas en réalité[2].Les espaces et sauts de ligne n&#8217;ont pas d&#8217;importance, on n&#8217;adopte cette présentation que pour le rendre plus lisible ; le code suivant a la même signification :&#60;tronc&#62;    &#60;branche&#62;        &#60;sousBranche&#62;contenu_1.1&#60;/sousBranche&#62;        &#60;sousBranche&#62;contenu_1.2&#60;/sousBranche&#62;    &#60;/branche&#62;    &#60;branche&#62;contenu_2&#60;/branche&#62;&#60;/tronc&#62;On pourrait même écrire tout à la suite, en enlevant tous les espaces et sauts de ligne ci-dessus, ce serait inintelligible mais techniquement correct.Les attributs de balisesRemarquez que jusqu&#8217;ici, seuls les types des balises sont présents, elle n&#8217;ont pas d&#8217;identifiant particulier, et rien ne permet de différencier la première branche de la deuxième, si ce n&#8217;est qu&#8217;elle est placée avant dans le code &#8211; ce qui est un moyen réel de l&#8217;identifier, bien que pas très pratique. C&#8217;est l&#8217;intérêt des attributs de balises.En effet, les balises peuvent s&#8217;écrire plus complètement de la façon suivante, par exemple pour une balise de type div :&#60;div class=&#34;titre_1&#34;&#62;    Texte, sous-branches…&#60;/div&#62;Dans la balise ouvrante, on peut ajouter des attributs, qui servent à enrichir leur description et à faciliter leur identification. Dans la page actuelle, vous pouvez vérifier que les titres de deuxième niveau sont repérés par des balises &#60;div class=&#34;h2&#34;&#62;. Un autre exemple est celui des liens hypertexte, qui sont décrits par des balises a, avec l&#8217;adresse indiquée comme attribut href (hypertext reference) ; voici comment on écrit ce lien renvoyant vers cette page :&#60;a href=&#34;http://data.hypotheses.org/243&#34;&#62;    lien renvoyant vers cette page&#60;/a&#62;Ce qui identifie une baliseOn a ainsi les trois éléments pour identifier une balise, qui sont :Son type (div, p, a, etc.),Ses attributs éventuels (class, attr, href, etc.),Le contenu de texte et les sous-branches qui y naissent.Pour des branches (ou sous-branches) formellement identiques, comme dans l&#8217;exemple vu précédemment, il nous reste l&#8217;ordre dans lequel celles-ci apparaissent dans le code HTML.Avec ce système d&#8217;identification, on aura toujours au moins une manière, et souvent plusieurs, de repérer une ou plusieurs balises, celles dont on voudra collecter automatiquement les données.Dans la pratiqueLa tête et le corpsLa structure d&#8217;un fichier HTML est standardisée. Elle est de la forme :&#60;!DOCTYPE html (…)&#62;&#60;html&#62;    &#60;head&#62;        &#60;meta&#62; …        &#60;meta&#62; …        &#60;link type=&#34;text/css&#34; href=&#34;http://…&#34;&#62;    &#60;/head&#62;    &#60;body&#62;        &#60;div&#62;            &#60;h1&#62; Titre &#60;/h1&#62;            &#60;p&#62;                Texte             &#60;/p&#62;        &#60;/div&#62;        …    &#60;/body&#62;        &#60;/html&#62;La première ligne (DOCTYPE) désigne la version du langage HTML que la page utilise. On n&#8217;aura jamais à s&#8217;en servir. Ensuite le contenu de la page est situé entre les balises html. Ce tronc se divise en deux branches : head, puis body.La branche head contient un ensemble d&#8217;informations sur la page (balises meta), des instructions de mise en page (chargées avec link), etc., mais aucun contenu affiché.Toutes les informations affichées, comme le texte, les images, sont décrites dans la partie body.Les balises réelles courantesCelui-ci est construit avec les balises du langage. Il n&#8217;est pas indispensable de les connaître pour faire de la collecte automatisée de données. À titre indicatif voici le plus courantes :&#60;div&#62; : un bloc rectangulaire de la page, contenant du texte ou des images ; souvent l&#8217;attribut class (ou parfois id) est présent ;&#60;a&#62; : un lien hypertexte, renvoyant vers l&#8217;adresse indiquée par l&#8217;attribut href ;&#60;h1&#62;, &#60;h2&#62;, &#60;h3&#62;, etc. : des titres, de niveaux décroissants ;&#60;p&#62; : un paragraphe de texte ;&#60;ul&#62;, &#60;ol&#62; : une liste, respectivement sans et avec numérotation ;&#60;img&#62; : une image ;&#60;!-- … --&#62; : un commentaire, c&#8217;est-à-dire du texte que le navigateur ignore.Il existe d&#8217;autres balises, et chaque nouvelle version du langage en apporte pour simplifier l&#8217;écriture et étendre les fonctionnalités disponibles (voir l&#8217;histoire du HTML). De nombreux manuels existent en ligne. Le plus simple est de vous y référer si besoin, ou simplement de rechercher sur un moteur de recherche la signification d&#8217;une balise, comme le font tous les programmeurs.Comment se fait la mise en page (facultatif)Pour être complet, mentionnons, sans rentrer dans les détails, qu&#8217;il existe deux manières de préciser les instructions de mise en page – par exemple pour un bloc &#60;div&#62; : ses dimensions, sa couleur de fond, etc.La première manière est de spécifier ces instructions comme attributs de la balise, directement dans le code HTML, par exemple : &#60;div style=&#34;width:100px;border:1pxsolidblack&#34;&#62;. Le HTML des années 1990 est écrit de cette manière lourde et pédestre, et on rencontre encore des pages sous cette forme.La seconde consiste à utiliser une feuille de style, au format CSS. Dans ce cas, on précise dans le HTML un attribut du bloc, par exemple &#60;div class=&#34;grand&#34;&#62; ; et dans un autre fichier, on précise les propriétés des blocs div possédant l&#8217;attribut class ayant la valeur grand, de manière générique. On peut ainsi en écrire plusieurs sans avoir à préciser à chaque fois les propriétés graphiques.Dans ce dernier cas, la page web ne se résume donc pas au code HTML, mais est la résultante aussi de la feuille de style (CSS). De manière générale, une page web est décrite par un ensemble de fichiers, dont le HTML est le centre et contient quasiment toutes les informations affichées à l&#8217;écran.Faire le lien entre le contenu affiché et le code sourceVisualiser le code sourceUne fois arrivé là, le code source d&#8217;une vraie page ne devrait plus rien avoir d&#8217;effrayant. Pour voir le code de cette page, demander à votre navigateur &#8220;Montrer le code source&#8221; ; le raccourci clavier est souvent Cmd-U (Mac) ou Ctrl-U (Windows), en ajoutant éventuellement Alt à cette combinaison (Safari ou Chrome, et ça dépend des versions) ; si vous ne trouvez pas, chercher &#8220;source&#8221; dans l&#8217;aide du logiciel.Vous devriez obtenir une fenêtre un peu terne, mais qui permet quand même de vérifier ce qu&#8217;on vient de présenter.Cela dit, ce n&#8217;est pas commode à lire. Pour disposer d&#8217;outils plus puissants et confortables, on vous encourage très vivement à installer Firebug pour Firefox, ou activer les outils de développeur, pour Safari (dans les préférences, menu &#8220;Avancées&#8221;, option &#8220;Afficher le menu Développement&#8221;) ; ou bien pour Chrome ouvrir les &#8220;Outils de développement&#8221;. Le raccourci clavier est souvent Cmd/Ctrl-(Alt)-I.Ainsi, normalement, vous obtenez quelque chose de ce genre-là :À quel morceau de code correspond un élément affiché ?Plutôt que de chercher à l'aveuglette à quel morceau de code correspond un élément affiché, on peut utiliser l'inspecteur web. Cliquez sur l'icone en forme de main ( Safari), de rectangle avec une flèche ( Firebug) ou de loupe ( Chrome), puis promenez votre curseur sur les éléments de la page qu'il vous intéresse de connaître : des zones de la page doivent se colorer en bleu. Cliquez ensuite sur un élément, et l'inspecteur web vous indique où se trouve son équivalent dans le code HTML.On peut alors observer ce qu'on annonçait au début de ce billet, à savoir que les éléments qui sont affichés de la même manière existent, dans le code source, de façon également similaire. Testez-le par exemple sur la colonne "liens", dans la colonne de droite de cette page :Une fois qu'on a repéré où sont, dans le code source, les informations que l'on veut récupérer, la moitié du chemin est fait. Il reste à savoir comment faire comprendre cette localisation à un programme ; pour cela, on utilisera la syntaxe XPath, qui fera l'objet d'un prochain billet.Certaines pages sont écrites, totalement ou partiellement, en PHP, un autre langage qui permet d’étendre les fonctions du HTML, et notamment faire communiquer l'utilisateur avec une base de données : cela est utile pour créer des formulaires, par exemple. Le principe est globalement le même : notre navigateur envoie une requête, et le serveur nous renvoie du HTML. Il existe encore d'autres langages pour ajouter des fonctions au HTML, comme le javascript, mais dans quasiment tous les cas on peut se dispenser de les connaître.  ↩En XML, qui est un cousin du HTML, tous les types sont autorisés.  ↩