Parser et modifier un fichier html avec php

Comment extraire des informations d'un fichier html et les modifier ?

2 mars 2015

Introduction

Nous avons développé une librairie php nommée php-simply-html permettant de parser et de modifier simplement un fichier html. Cette librairie utilise l'extension DOM de php.

Nous l'avons utilisé dans notre librairie w3c-validator, pour extraire les phrases de notre projet lyon.glicer.com à envoyer au correcteur orthographique, et pour extraire les liens à vérifier.

Pré-requis

Sélecteurs CSS permettent de sélectionner les balises html à extraire ou à modifier.

PHP ou Hypertext Preprocessor doit être installé, php est un langage de programmation libre principalement utilisé dans le développement internet.

Composer est un gestionnaire libre de dépendances pour php, il permet de déclarer et d'installer automatiquement des librairies tierces.

Installation de composer

Exécuter dans un invité, la ligne de commande ci-dessous :

php -r "readfile('https://getcomposer.org/installer');" | php

Cela affiche :

#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: C:\tmp\composer.phar
Use it: php composer.phar

Un fichier composer.phar est maintenant présent dans le répertoire courant.

Configurer le fichier composer.json

Créer un fichier composer.json dans le répertoire courant contenant :

{
    "require": {
        "glicer/simply-html": "dev-master"
    }
}

Installation des librairies

À partir du même répertoire que composer.json, exécuter dans un invité, la ligne de commande ci-dessous :

php composer.phar install

Cela affiche :

Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing symfony/css-selector (v2.6.4)
    Loading from cache

  - Installing glicer/simply-html (dev-master f2436c9)
    Cloning f2436c9e31a2e356cbd305c19fa7cc4933d02e04

Writing lock file
Generating autoload files

Structure du répertoire

Le répertoire courant contient les fichiers ci-dessous :

composer.json
composer.phar
composer.lock
vendor
 ├───composer
 ├───glicer
 │   └───simply-html

 └───symfony

Exemples d'utilisation de la librairie php-simply-html

Modification de balises d'un fichier html

Les balises à modifier peuvent être sélectionnées en utilisant les sélecteurs css.

Créer un fichier sample_modify_simplyhtml.php contenant le code ci-dessous :

 <?php
 require 'vendor/autoload.php';

 use GlHtml\GlHtml;

 $html = file_get_contents("index.html"); //lit le contenu du fichier index.html

 $html = new GlHtml($html);

 $html->delete('head style');  //supprime les balises style contenu dans head

 $style = '<link href="solver.css" type="text/css" rel="stylesheet"></link>'; //créer une nouvelle balise style
 $html->get("head")[0]->add($style);                                   //ajoute la nouvelle balise style

 file_put_contents("result.html",$html->html());                       //écrit le nouveau fichier html

Le fichier à modifier se trouve dans le répertoire courant, dans notre cas index.html.

Exécuter le script en tapant la ligne de commande ci-dessous :

php sample_modify_simplyhtml.php

En comparant les fichiers index.html et result.html, on constate que l'entête a été modifié, l'ensemble des balises style ont été remplacées par une seule balise link.

Extraction du texte d'un fichier html

Créer un fichier sample_extract_simplyhtml.php contenant le code ci-dessous :

<?php
require 'vendor/autoload.php';

use GlHtml\GlHtml;

$html = file_get_contents("index.html"); //lit le contenu du fichier index.html

$html = new GlHtml($html);
$sentences = $html->getSentences();
foreach ($sentences as $sentence) { //affiche l'ensemble des phrases contenues dans le fichier html
    echo $sentence . "\n";
}

Exécuter le script en tapant la ligne de commande ci-dessous :

php sample_extract_simplyhtml.php

Cela affiche, par exemple :

Solver
Ce blog répertorie les difficultés techniques rencontrées au cours de nos projets et leurs solutions
Vérifier automatiquement et gratuitement la conformité des fichiers html et css
Comment détecter les erreurs d'un ensemble de fichiers html et css ?
2 mars 2015
Créer, héberger et personnaliser une carte interactive
Comment concevoir une carte géographique interactive pour un fonctionnement en ligne ou hors ligne ?
26 février 2015

Versions des logiciels et langages utilisés