Après avoir rapatrié les 50 URLS, j'ai commencé par créer mon arborescence, l'ensemble des dossiers qui rameute les programmes à lancer (PROGRAMMES), les résultats à obtenir (PAGES-ASPIREES, TABLEUX, DUMP-TEXT).. passant à la suite à l'élaboration de mes scripts, écrits en langage shell.
L'interprète, Cygwin, tentant de créer un environnement Unix sous Windows, est capable de lire le code source de ce langage sous forme de script et d'exécuter les instructions après une analyse syntaxique du contenu. Jusqu'ici, j'ai bien créé mon environnement de travail et je peux commencer le lancement de mes script.
Premier script
Suite à l'exécusion du premier script, j'ai pu avoir une page html qui regroupe mes URLS dans un tableau. Les liens cette fois sont cliquables et numérotés de 1 à 50.
Exécution du Script:
Résultat:
Second script
Wget, un programme en ligne de commande, écrit en C, m'a permis d’automatiser l’aspiration des pages de mes URLS, ainsi que leur enregistrement dans le répertoire PAGES-ASPIREES préalablement créé. Ç'a été mon deuxième script. Cette fois, j'ai eu quelques problèmes d’aspiration, dans le sens où les liens sélectionnés dans le tableau fonctionnent parfaitement, en revanche, quelques pages aspirées ne sont pas fonctionnaires.
Exécution du Script:
Résultat:
L'objectif du troisième script est la création d'un tableau qui regroupe les URLS, les pages aspirées correspondantes et les DUMPS des pages aspirées obtenus avec la commande LYNX. Cette dernière permet de convertir les pages Web en pages texte, autrement dit, de récupérer seulement le contenu textuel de la page aspirée. L'exécution de ce script donne ordre de lire toutes les pages Web aspirées, réparties dans les sous-dossiers, de les traiter avec la commande lynx -dump et enfin de rediriger ces pages dumpées vers les sous-dossiers respectifs du répertoire DUMP. Les données sont sauvegardées automatiquement dans le répertoire DUMP. Le script produit un tableau en trois colonnes contenant en vis à vis les URLS, les adresses des pages aspirées stockées dans le dossier PAGES-ASPIREES et les adresses des pages "dumpées" enregistrées dans le dossier DUMP-TEXT.
Exécution du Script:
Résultat:

L'objectif du quatrième script est la création de deux tableaux qui regroupent les URLS, notamment les URLS français, mais aussi les URLS arabes, les pages aspirées correspondantes et les DUMPS
des pages aspirées obtenus avec la commande LYNX.
La Contrainte cette fois conserne le recouvrement du contenu textuel des pages arabes aspirées; Un problème d'encodage se manifeste par le fait qu'une partie ou la totalité des caractères des documents ne sont pas affichés correctement. A cette étape, j'ai me suis posée : "Quelle est l'étendue du problème? S'agit-il d'un contenu inconvertible en page texte? Ou s'agit-il peut-ètre d'un problème de script?".
Pour répondre à ces interrogations, j'ai dû consulter les sites Web qui proposent des dénouements et les solutions mises en oeuvre les années précédentes. Je me suis rendu compte que si la page initiale est déjà encodée en UTF-8, un format de codage de caractères, tout fonctionne correctement. En revanche, si la page initiale n'est pas en UTF-8, il faut appliquer l'opération de transcodage. Du point de vue de la machine, de nombreux travaux portent sur ce processus d'encodage. Les caractères que portent mes pages aspirées, comme toute donnée informatique, ne sont qu'une sucession de 0 et de 1. C'est le langage natif d'un processeur, c'est-à-dire le seul qu'il puisse traiter. Il est composé d'instructions et de données à traiter codées en binaire. C'est la représentation et l'ordonnance de ces bits qui définissent la norme d'un encodage.
Après avoir réalisé l'opération de transcodage, via la commande iconv, j'ai pu lancer normalement mon script et avoir un tableau regroupant les URLS arabes, les pages aspirées correspondantes et les DUMPS.
Exécution du Script:
Résultat:

L'objectif cette fois est la création d'un tableau qui regroupe les URLs, les pages aspirées correspondantes, les DUMPS des pages aspirées, et les contextes obtenus avec la commande egrep.
Reprenons en détail le script pour commenter les commandes qui le constituent:
#!/bin/bash
read REP;
read tablo;
read motif;
echo "<html><head><title>tableaux de liens</title>" > $tablo;
echo "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=ISO-8859-1\" /> " >> $tablo;
echo "<style>" >> $tablo;
echo "h1, h2, h3, p, td { font-family: Calibri, Verdana,sans-serif; } " >> $tablo;
echo "h4, h5 { margin: 0px; padding: 0px; } " >> $tablo;
echo "h1 {color: #000060; font-size: 16pt; font-weight: bold;} " >> $tablo;
echo "h2 {color: #000060; font-size: 14pt; font-weight: bold;} " >> $tablo;
echo "h3 {color: #000060; font-size: 12pt; font-weight: bold;} " >> $tablo;
echo "a:visited {text-decoration: none;color: blue;}" >> $tablo;
echo "a:link {text-decoration: none;color: blue;}" >> $tablo;
echo "a:hover{text-decoration: none;color: red;}" >> $tablo;
echo "</style>" >> $tablo;
echo "</head><body bgcolor=\"silver\">" >> $tablo;
echo "<div style='border:solid windowtext .75pt;padding:4.0pt 4.0pt 4.0pt 4.0pt;background:#D7D5D2;margin-left:80px;margin-right:80px;'><blockquote>" >> $tablo;
echo "<h3><span style='background-color:#FC3;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>Les TABLEAUX de données</span></h3>" >> $tablo;
-Sur la console de Cygwin, j'ai choisi le nom du fichier de sortie
-La commande echo permet d'afficher sur la console Cygwin les informations contenues entre guillemets
#Variable pour compter les tableaux
j=1;
for fic in `ls $REP`
{
echo "<table bgcolor=\"white\" align=\"center\" border=\"1\"><tr><td colspan=\"9\" align=\"center\" bgcolor=\"black\"><font color=\"white\"><h4><b>Tableau n° $j</b></h4></font><small><span style='background-color:silver;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>fichier : $fic</span></small></td></tr>" >> $tablo;
echo "<tr><td align=\"center\" width=\"50\"><b>n°URL</b></td><td align=\"center\" width=\"100\"><b>URL</b></td><td align=\"center\" width=\"100\"><b>PAGES ASPIREES</b></td><td align=\"center\" width=\"20\"><b>Ret. CURL</b></td><td align=\"center\" width=\"100\"><b>DUMP initial</b><br/><small>(non utf-8)</small></b></td><td align=\"center\" width=\"100\"><b>DUMP utf-8</b></td><td align=\"center\" width=\"100\"><b>CONTEXTES</b></td><td align=\"center\" width=\"100\"><b>CONTEXTES<br/>HTML</b></td><td align=\"center\" width=\"100\"><b>NB Occur</b></td></tr>" >> $tablo;
# Variable i pour compter les URLs
i=1;
nbdump=0;
mkdir -p CONTEXTES/$j ;
mkdir -p DUMP-TXT/$j ;
mkdir -p PAGES-ASPIREES/$j ;
J'ai créé dans les répertoires PAGES-ASPIREES, DUMP et CONTEXTES des sous-dossiers dont les résultats seront respectivement des pages aspirées, des pages "dumpées" et des contextes fiables.
for nom in `cat $REP/$fic`
{
echo "================================================================";
echo "==========TRAITEMENT : $nom ";
#------- on CURL et on determine l'encodage -----------------------------------------
curl -o ./PAGES-ASPIREES/$j/$i.html "$nom";
retourcurl=$? ;
contenupageaspiree=$(egrep -i -o "(400 )?Bad request|Moved Permanently|s interdit|Not Acceptable" ./PAGES-ASPIREES/$j/$i.html | sort -u);
if [[ $contenupageaspiree != "" ]]
then
retourcurl="<span style='background-color:black;color:white;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>$retourcurl<br/>BAD</span>";
fi
echo "RETOUR CURL : $retourcurl";
if [[ $retourcurl == 0 ]]
then
encodage=$(file -i ./PAGES-ASPIREES/$j/$i.html | cut -d= -f2);
echo "ENCODAGE initial : $encodage";
#------- on continue en tenant compte de l'encodage fourni par curl---------------------
if [[ $encodage == "utf-8" ]]
then
lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$j/$i.html > ./DUMP-TXT/$j/$i-utf8.txt ;
egrep -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt > ./CONTEXTES/$j/$i-utf8.txt ;
nbOccur=??;
nbOccur=$(egrep -o -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt | wc -l );
perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$j/$i-utf8.txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt ;
-Perl, un langage de programmation qui permet de disposer d'un langage optimisé pour l'extraction d'informations de fichiers textes et la génération de rapports.
-C'est un langage interprété, polyvalent, et particulièrement adapté au traitement et à la manipulation de fichiers texte, notamment du fait de l'intégration des expressions régulières dans la syntaxe même du langage.
-Comme en shell, le caractère dièse (#) introduit un commentaire, le sigil dollar ($) dénote une variable scalaire.
-Les sigils permettent de reconnaître les noms de variables dans des chaînes de caractères et d'interpréter ces variables.
mv resultat-extraction.html ./CONTEXTES/$j/$i-utf8.html ;
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$j/$i.html\">$i.html</a></td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\"> - </td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\" ><a href=\"../CONTEXTES/$j/$i-utf8.html\">$i-utf8.html</a></td><td align=\"center\" bgcolor=\"yellow\"><span style='background-color:red;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>$nbOccur</span></td></tr>" >> $tablo;
cat ./CONTEXTES/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
cat ./DUMP-TXT/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
let "nbdump+=1";
else
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u);
if [[ $VERIFENCODAGEDANSICONV != "" ]]
then
#-------------------------------------------
# le charset extrait est connu de iconv : on lynxe et on dump !!!
#-------------------------------------------
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$j/$i.html > ./DUMP-TXT/$j/$i.txt ;
echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
iconv -f $encodage -t utf-8 ./DUMP-TXT/$j/$i.txt > ./DUMP-TXT/$j/$i-utf8.txt
iconv est une interface de programmation d'application utilisée pour la conversion de chaînes de caractères d'un codage de caractères à un autre en Unix-like.
egrep -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt > ./CONTEXTES/$j/$i-utf8.txt ;
nbOccur=??;
nbOccur=$(egrep -o -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt | wc -l );
perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$j/$i-utf8.txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt ;
mv resultat-extraction.html ./CONTEXTES/$j/$i-utf8.html ;
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$j/$i.html\">$i.html</a></td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$j/$i.txt\">$i.txt</a><br/><small>($encodage)</small></td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$j/$i-utf8.html\">$i-utf8.html</a></td><td align=\"center\" bgcolor=\"yellow\"><span style='background-color:red;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>$nbOccur</span></td></tr>" >> $tablo;
cat ./CONTEXTES/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
cat ./DUMP-TXT/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
let "nbdump+=1";
else
#-----------------------------------------------------
# la page n'est pas en utf-8 et son encodage detecte par file n'est pas connu de iconv, on cherche un charset...
#-----------------------------------------------------echo "on cherche un charset dans la page aspiree...";
if egrep -i "<meta.*charset" ./PAGES-ASPIREES/$j/$i.html ;
then
#----------------------------------------------
# on a peut-etre trouve un charset.....
#----------------------------------------------
echo "Presence d'un charset...";
encodage=$(egrep -i "<meta.*charset" ./PAGES-ASPIREES/$j/$i.html | egrep -i -o 'charset *=[^\"]+' | tr [A-Z] [a-z] | sort -u | cut -f2 -d=) ;
echo "charset extrait : $encodage ";
#-------------------------------------------------------------------
# avant de continuer on va vérifier si le charset est connu de iconv
#-------------------------------------------------------------------
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u);
if [[ $VERIFENCODAGEDANSICONV == "" ]]
then
#-------------------------------------------
# le charset n'est pas connu de iconv : on fait rien....
#-------------------------------------------
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien"
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$j/$i.html\">$i.html</a></td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\" bgcolor=\"yellow\"><small>Encodage<br/>non détecté</small></td><td align=\"center\" width=\"100\" bgcolor=\"yellow\"><small>Encodage<br/>non détecté</small></td><td align=\"center\" width=\"100\" bgcolor=\"yellow\"><small>Encodage<br/>non détecté</small></td><td align=\"center\"> - </td><td align=\"center\"> - </td><td align=\"center\"> - </td></tr>" >> $tablo;
else
#-------------------------------------------
# le charset extrait est connu de iconv : on lynxe et on dump !!!
#-------------------------------------------
echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..."
lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$j/$i.html > ./DUMP-TXT/$j/$i.txt ;
echo "ENCODAGE final : $encodage (avant conversion vers utf-8)";
iconv -f $encodage -t utf-8 ./DUMP-TXT/$j/$i.txt > ./DUMP-TXT/$j/$i-utf8.txt
egrep -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt > ./CONTEXTES/$j/$i-utf8.txt ;
nbOccur=??;
nbOccur=$(egrep -o -i "\b$motif\b" ./DUMP-TXT/$j/$i-utf8.txt | wc -l );
perl ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$j/$i-utf8.txt ./PROGRAMMES/minigrepmultilingue-v2.2-regexp/motif-regexp.txt ;
mv resultat-extraction.html ./CONTEXTES/$j/$i-utf8.html ;
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$j/$i.html\">$i.html</a></td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$j/$i.txt\">$i.txt</a><br/><small>($encodage)</small></td><td align=\"center\" width=\"100\"><a href=\"../DUMP-TXT/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$j/$i-utf8.txt\">$i-utf8.txt</a></td><td align=\"center\" width=\"100\"><a href=\"../CONTEXTES/$j/$i-utf8.html\">$i-utf8.html</a></td><td align=\"center\" bgcolor=\"yellow\"><span style='background-color:red;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>$nbOccur</span></td></tr>" >> $tablo;
cat ./CONTEXTES/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ;
cat ./DUMP-TXT/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ;
let "nbdump+=1";
fi
else
echo "Pas de charset detecte : on ne fait rien pour le DUMP... ";
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\"><a href=\"../PAGES-ASPIREES/$j/$i.html\">$i.html</a></td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\" bgcolor=\"yellow\"><small>Encodage<br/>non détecté</small></td><td align=\"center\" width=\"100\" bgcolor=\"yellow\"><small>Encodage<br/>non détecté</small></td><td align=\"center\"> - </td><td align=\"center\"> - </td><td align=\"center\"> - </td></tr>" >> $tablo;
fi
fi
fi
# fin curl OK
else
echo "<tr><td align=\"center\" width=\"50\">$i</td><td align=\"center\" width=\"100\"><a href=\"$nom\">$nom</a></td><td align=\"center\" width=\"100\" bgcolor=\"red\"> - </td><td align=\"center\" width=\"20\">$retourcurl</td><td align=\"center\" width=\"100\" bgcolor=\"red\"> - </td><td align=\"center\" width=\"100\" bgcolor=\"red\"> - </td><td align=\"center\"> - </td><td align=\"center\"> - </td><td align=\"center\"> - </td></tr>" >> $tablo;
fi
let "i+=1";
}
echo "<tr><td align=\"center\" colspan=\"4\" bgcolor=\"silver\"> </td><td align=\"center\" width=\"100\"><a href="../FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt">Fichier DUMP<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td align=\"center\" width=\"100\"><a href="../FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt">Fichier CONTEXTES<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td align=\"center\" bgcolor=\"silver\"> </td><td colspan="3" bgcolor=\"silver\"></td></tr>" >> $tablo;
echo "</table>" >> $tablo;
let "j+=1";
echo "<p align=\"center\"><hr color=\"blue\" width=\"50%\"/></p>" >> $tablo;
}
echo "</body></html>" >> $tablo;
Cette instruction permet de rechercher dans les fichiers ou sur son entrée standard des lignes de texte qui satisfont une expression régulière indiquée, en donnant, par exemple, le nom des
fichiers où le critère a été trouvé, ou le nombre de lignes trouvées obéissant au critère... Autrement dit, cette commande concéde l'extraction d'un motif bien précis dans un fichier
donné.
| Mai 2012 | ||||||||||
| L | M | M | J | V | S | D | ||||
| 1 | 2 | 3 | 4 | 5 | 6 | |||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | ||||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | ||||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | ||||
| 28 | 29 | 30 | 31 | |||||||
|
||||||||||